2011-10-06 12 views
7

w javascript, możemy utworzyć nowy element DOM w następujący sposób ...Korzystanie createAttribute vs. tylko ustawienie atrybutu bezpośrednio?

Używając createAttribute() + setAttributeNode() metod DOM:

var input = document.createElement("input"), 
    type = document.createAttribute("type"); 

type.nodeValue = "text"; 
input.setAttributeNode(type); 
container.appendChild(input); 

lub po prostu ustawienie atrybuty bezpośrednio :

var input = document.createElement("input"); 

input.type = "text"; 
container.appendChild(input); 

Te ostatnie mogą okazać się znacznie mniejszym kodem, nawet jeśli istnieje tylko kilka atrybutów na element.

Pytanie: czy ktokolwiek napotkał jakiekolwiek wady tej ostatniej metody (ustawienie atrybutów bezpośrednio)?

Testowałem to w kilku przeglądarkach (najnowsze FF, IE, Safari, Opera, stare IE - nawet IE6 pracował) i na podstawowym teście (wstawiając dane wejściowe z atrybutami typu, nazwy i maxLength), wszystkie one przeszły . Here's the fiddle, jeśli ktoś tego potrzebuje.

Odpowiedz

9
document.createAttribute 
document.createAttributeNS 
element.getAttributeNode 
element.getAttributeNodeNS 
... and a lot of others 

będą przestarzałe w DOM4, więc nie należy go używać, wystarczy ustawić z setAttribute ("nazwa", "wartość")

http://www.w3.org/TR/dom/#element

someinput.type różni zasadzie jest skrót do robienia tego, aby pomóc to!

element._some_attribute_ is not available for all attributes, just some: 
element.dir 
element.lang 
element.id 
...etc 
+2

To nie do końca prawda, że ​​użycie 'setAttribute()' i 'getAttribute()' jest zawsze równoważne użyciu odpowiedniej właściwości. Na przykład, 'value' nieruchomość (który zawsze odzwierciedla bieżącą wartość wejścia) istnieje oddzielnie od' value' atrybutu (co stanowi jedynie wartość początkową). Bardziej oczywistym przykładem jest 'style' atrybut, który zawiera ciąg, w porównaniu z' własności style', która jest 'obiekt CSSStyleDeclaration' z indywidualnych właściwości dla poszczególnych właściwości stylu. –

+0

gdzie powiedziałem, że zawsze są one równoważne? : P –

+0

Uczciwy punkt, nie zrobiłeś tego. Nie jestem pewien, co skłoniło mnie teraz do komentarza. –

Powiązane problemy