IE incomplete DOM support…

ამჯერად ყურადღებას შევაჩერებ DOM ელემენტის hasAttribute მეთოდზე. ამ მეთოდის სახელი საკმაოდ თვითდოკუმენტირებულია და ადვილი მისახვედრია რისთვისაც გამოიყენება.

ზუსტი განმარტება:

The hasAttribute() method returns TRUE if the current element node has the attribute specified by name, and FALSE otherwise.

მაგრამ IE – ში DOM ელემენტს არ გააჩნია ეს შედარებით იშვიათად გამოყენებადი მაგრამ ძალიან სასარგებლო მეთოდი. თუმცა არსებობს სხვა საშუალება ამ ბრაუზერისათვის რომლის მეშვეობითაც ადვილად ავიცილებთ თავიდან ამ DOM – ის არასრული მხარდაჭერით გამოწვეულ პრობლემას.

მაგალითად იმის დასადგენად ელემენტს გააჩნია თუ არა რომელიმე ატრიბუტი, შეგვიძლია დავწეროთ ასეთი კოდი:

1
2
3
4
5
6
7
8
9
10
var el = document.getElementById('my-element-id');
var attributeName = 'type';

//სტანდარტებთან თავსებადი ბრაუზერები
if (el.hasAttribute) {
  return el.hasAttribute(attributeName);
} else {
  //მხოლოდ IE
  return el.attributes[attributeName] && el.attributes[attributeName].specified;
}

მაგალითიდან ჩანს რომ IE – ს შემტხვევაში ვიყენებთ ელემენტის attributes თვისებას… ეს არის მასივის ტიპის თვისება რომელიც შიცავს ელემენტის ატრიბუტებს, და მისი მეშვეობით შეგვიძლია ამოვიღოთ ელემენტის სასურველი ატრიბუტი(და არა ატრიბუტის მნიშვნელობა)… ასევე ყურადღება მიაქციეთ .specified თვისებას, მისი მნიშვნელობა არის ან true თუ ატრიბუტი განსაზღვრულია ან false წინააღდმეგ შემთხვევაში მაგრამ არის ერთი მაგრამ… ამ კონსტრუქციას el.attributes[attributeName].specified ვერ გამოვიყენებთ თუ ატრიბუტი განსაზღვრული არ არის :D ანუ გამოდის რომ specified თვისება უსარგებლოა ისეთ შემთხვევაში თუ ატრიბუტი არ არსებობს და ჯერ საჭიროა ზოგადად ატრიბუტის არსებობა… ამას ვაღწევთ el.attributes[attributeName] – ის მეშვეობით, თუ ატრიბუტი არსებობს ხელთ გვაქვს ობიექტი რომელსაც აქვს თვისება specified… რატომ არ ვიყენებთ მხოლოდ ამ “el.attributes[attributeName]” კონსტრუქციას? მიზეზი მარტივია… მოყვანილი მაგალითის დანიშნულებაა დააბრუნოს ან true ან false და არა ობიექტი… სწორედ ამის გამო გამოვიყენე ასეთი ჩაწერა:

1
el.attributes[attributeName] && el.attributes[attributeName].specified;

თუმცა ასეთივე წარმატებით შეგვეძლო გამოგვეყენებინა ორი უარყოფის(not) ოპერატორი:

1
!!el.attributes[attributeName];

რას აკეთებს ორი “!!”? ამ შემთხვევაში მარჯვენა(მეორე) უარყოფის ოპერატორი გადაიყვანს object ტიპის მნიშვნელობას boolean ტიპის მნიშვნელობაში(შესაბამისად თუ გვექნება null იგი გარდაიქმნება true – დ, ხოლო თუ გვექნება null – იდან განსხვავებული მნიშნველობა ანუ ამ შემთხვევაში object იგი გარდაიქმნება false – დ), ხოლო მარცხენა(პირველი) ოპერატორი შეაბრუნებს ამ მნიშვნელობას ან ჭეშმარიტიდან მცდარისკენ ან პირიქით, რაც სრულებით საკმარისია მიზნის მისაღწევად.

ტეგები: , ,

One Response to “IE incomplete DOM support…”

  1. აუ ვერ სჰევიდავ ადჯარაბეტზე სკრიპტი არ გაქო და დამეხმარეტ კაცურად რა მასწავლეტ როგორ უნდა რა კაცურად გტხოვტ

დატოვე კომენტარი:

ქართული კლავიატურა, ჩართვა/გამორთვა კლავიშით "~"