აქამდე ძალიან ბევრ უკვე არსებულ ელემენტს ვცვლიდით გვერდზე.
მაგრამ როგორ უნდა დავუმატოთ გვერდს ახალი ელემენტები?
ამის გაკეთება შეგვიძლია 'innerHTML'-ით HTML-ს თეგების წერით
სხვადასხვა ხაზებში.
ამან შეიძლება ცოტა არიოს სიტუაცია,
განსაკუთრებით თუ ბევრი თეგის დაწერა გინდა, სხვადასხვა ატრიბუტებით, სტილებით და კლასებით.
ამითომ, შეგვიძლია
ახალი ელემენტები ნულიდან შევქმნათ და შემდეგ დავუმატოთ ისინი გვერდს.
დავუშვათ, ამ გვერდზე კატის სურათის დამატება გვინდა.
იმიტომ რომ გვგონია, რომ ჯერ კიდევ საკმარისად ბევრი არ არის.
პირველ რიგში ახალი ელემენტი უნდა შევქმნათ, ხომ სწორია?
სწორია.
დავიწყოთ ელემენტის შესანახი ცვლადის შექმნით. დავარქვათ მას catEI
შემდეგ უნდა გამოვიყენოთ `document.createElement`,
და ჩავსვათ თეგის სახელი, რომელსაც ვქმნით ამ შემთხვევაში img.
ახლა წარმოიდგინე, რომ ბრაუზერმა შექმნა სურათის თეგი
და ახლა ეს სურათის თეგი სადღაც სივრცეში ტივტივებს
ამიტომ ახლა უნდა მივანიჭოთ მას წყარო
catEl.src =
და უბრალოდ ჩავსვათ წყარო აქედან
და... ჰო, უნდა დავუმატოთ alt, რომ სურათი უფრო ადვილად მისაწვდომი იყოს
alt თეგები ყოველთვის უნდა გვქონდეს სურათებზე
ახლა ამ თეგს, რომელიც ჩვენ შევქმენით
აქვს src და ასევე alt თეგები "Photo of cute cat/საყვარელი კათის სურათი"
ოქეი, ეს გავაკეთეთ JavaScript-ით.
თუმცა თეგი ჯერ კიდევ ტივიტვებს სივრცეში,
იმიტომ რომ არ გვითქვამს ბრაუზერისთვის, სად უნდა წაიღოს იგი.
ჩვენს DOM-ში უამრავი ადგილია, სადაც მისი მოთავსება შეიძლება.
ყველაზე მარტივად რომ ვქნათ, გამოვაჩინოთ ეს სურათი გვერდის ბოლოს.
დავაჭიროთ თეგის ბოლოს
და დავწეროთ: `document.body.appendChild(catEl);`
აი, ისიც!
საკმაოდ დიდია.
და ცოტა საშიშად გამოიყურება.
ახლა შეგიძლია გამოიძახო appendChild გვერდის ნებისმიერი DOM კვანძზე
და ეს შესულ ელემენტს ამ კვანძის ბოლო ელემენტად აქცევს.
აი ასეთ შემთხვევებში ნამდვილად სასარგებლოა DOM-ის ხის სახით გამოსახვა
თეგი არის ამ ხის კვანძი და მას რამდენიმე განყოფილება აქვს
მაგალითად ` და``,
და ახლა ბოლოს კიდევ ერთს ვუმატებთ.
მოკლედ ეს გადმოვა თეგის მერე, აი, აქ.
DOM მეთოდების გამოყენებით თეორიულად უნდა შეგეძლოს მიამაგრო ელემენტები
DOM-ის ნებისმიერ ნაწილში.
ჩვენ უბრალოდ ის ყველაზე მარტივ და ადვილად მისაგნებ ადგილას მოვათავსეთ.
გავაკეთოთ კიდევ ერთი მაგალითი.
აქ ჩვენ გამოვიყენეთ innerHTML იმისთვის, რომ თეგებში ჩაგვესვა
თუმცა შეგვიძლია გამოვიყენოთ createElement
[ბეჭდავს]
ჰმ, ბეჭდური შეცდომა დავუშვი. მართლწერა აქ ძალიან მნიშვნელოვანია.
ასე შევქმენით ცარიელი თეგი , რომელიც სადღაც სივრცეშია.
პირველ რიგში უნდა განვსაზღვროთ მისთვის ტექსტი:
strongEl.textContent = "cat";
ხომ სწორია?
შეგვეძლო კიდევ შეგვექმნა
textNode
DOM-ის ბევრ კვანძს შეიძლება სპეციალური textNode ჰქონდეს
და ეს კვანძები ცალკე ელემენტები კი არა, მაინც DOM-ის კვანძებად რჩება.
რეალურად მათ ფოთლის კვანძებს ვეძახით
იმიტომ რომ ესენი ხის უკანასკნელი ელემენტებია.
[ბეჭდავს]
მოკლედ, ჩავწერთ ტექსტი "cat"
ახლა ჩვენ
შევქმენით ორი კვანძი, რომელიც უმისამართოდ მდებარეობს სივრცეში: თეგი
და ეს textNode, რომელიც უბრალოდ გვეუბნება "cat"-ს
ახლა კი ისინი ერთმანეთს უნდა დავუკავშიროთ.
და უნდა იყოს "cat"-ის მშობელი.
ამისთვის უნდა ჩავწეროთ `strongEl.appendChild(strongText);`
მოკლედ, გვაქვს თეგი რომელიც მოიცავს კვანძს "cat" .
ახლა კი სადმე უნდა ჩავსვათ ეს, მივუჩინოთ ადგილი ამ კოდში და ვებ-გვერდზე.
ახლა ვართ ციკლში "for", რომელიც შექმნილია ელემენტისთვის nameEls
სწორედ ყოველი nameEls-ს გვინდა, რომ გადაებას თეგს
გამოვა ასე: `nameEls[i].appendChild(strongEl);`
ახლა სურათს ორჯერ ვხედავთ, იმიტომ რომ წინა გზით გაკეთებულიც დავტოვე.
მოკლედ, ეს გადაება თეგს , რომელიც უკვე შეიცავს თეგს.
ეს ხაზი შეიძლება შევცვალოთ ასე: innerHTML უდრის ცარიელ ხაზს
რაც ეფექტურად მოაშორებს სპანს, სანამ მას რამეს მივუმაგრებთ.
როგორც ხედავ, ამ მეთოდს კოდის მეტი ხაზი დასჭირდა, ვიდრე innerHTML-ს.
შეიძლება, გაინტერესებს, საერთოდ რატომ გამოვიყენეთ ის?
ბევრ დეველოპერს დოკუმენტის ასე შეცვლა არ მოსწონს,
იმიტომ რომ მეტი კოდის წერა უწევთ.
უმეტესობა ბიბლიოთეკებს იყენებს, მაგალითად jQuery-ს.
შემდეგ კი ცვლიან DOM-ს.
ასე იგივე კოდში შენ, როგორც დეველოპერს, გაცილებით ნაკლები ხაზის წერა გიწევს,
იმიტომ რომ ბიბლიოთეკის ფუნქციებს იყენებს.
მე კიდევ საკმაოდ მომწონს ასე წერა,
იმიტომ რომ ზუსტად ვხედავ, როგორც ვცვლი DOM-ს, ხაზს ხაზის შემდეგ,
ასე თითტოს უფრო ცხადია ყველაფერი, ვიდრე innerHTML-ის ერთ ხაზში.
შეიძლება, შენ არ მეთანხმები,
მაგრამ, მთავარია, იცი, რომ ეს გზაც არსებობს.
თუ დაგჭირდა, შეძლებ გამოიყენო და გაიგო,
რა ხდება "სცენის მიღმა" jQuery -ის მსგავს ბიბლიოთეკებში.