DOMTokenList#
stringifier#
Operacja specjalna stringifier
widoczna w definicji Web IDL interfejsu DOMTokenList oznacza, że obiekt implementujący ten interfejs powinien zostać zamieniony na postać tekstową według niestandardowych reguł określonych w specyfikacji.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var string = domTokenList.toString(); // jawnie var string = stringMethod(domTokenList); // niejawnie
gdzie poszczególne człony oznaczają:
- string - łańcuch znakowy reprezentujący wartość skojarzonego atrybutu.
- domTokenList - zestaw słów DOM będący obiektem kontekstu.
- stringMethod - w przypadku metody o charakterze tekstowym, np.
windo.alert()
lubdocument.write()
, konwersja jest automatyczna.
Algorytm wywołania operacji specjalnej stringifier
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Zwróć wynik działania kroków serializacji dla obiektu kontekstu.
Były przymiarki do zmiany zachowania dla operacji stringifier
tak, aby zwracała wynik serializacji uporządkowanego zestawu zamiast wartości ze skojarzonego atrybut, co ułatwiłoby testowanie prawidłowego działania zestawów (np. w kwestii przestrzegania unikatowości słów). Niestety żadna przeglądarka internetowa nie wprowadziła stosownych korekt i pomysł zarzucono (DOM - Bug 105). W razie potrzeby można sięgnąć po inne rozwiązania wprost z JS-a, które zapewnią podobną funkcjonalność (np. iterując po elementach zestawu lub konwertując zestaw na tablicę i potem na łańcuch znakowy).
Alternatywnie można skorzystać z identycznie działającej właściwości DOMTokenList.value
(przy odczycie).
Prosty przykład:
<script>
function showTokens(set){
return Array.prototype.slice.call(set).join(" ");
}
var html = document.documentElement; // referencja do elementu HTML
var list = html.classList; // referencja do zestawu słów DOM
html.className = "Test1 Test2 Test3 Test3"; // ustawiamy wartość atrybutu class
document.write(html.className); // Test1 Test2 Test3 Test3
document.write("<br>");
document.write(html.className.length); // 23
document.write("<br><br>");
document.write(showTokens(list)); // Test1 Test2 Test3
document.write("<br>");
document.write(list.length); // 3
document.write("<br><br>");
document.write(list.constructor); // function DOMTokenList() { [native code] }
document.write("<br>");
document.write(typeof list); // object - zestaw słów DOM jest obiektem
document.write("<br>");
document.write(list); // Test1 Test2 Test3 Test3 - niejawna konwersja obiektu na tekst
document.write("<br>");
document.write(list.toString()); // Test1 Test2 Test3 Test3 - wymuszona konwersja obiektu na tekst
document.write("<br>");
document.write(list.value); // Test1 Test2 Test3 Test3 - alternatywna właściwość
document.write("<br><br>");
document.write(list.hasOwnProperty("toString")); // false
document.write("<br>");
document.write(list.constructor.hasOwnProperty("toString")); // false
document.write("<br>");
document.write(list.constructor.prototype.hasOwnProperty("toString")); // true
</script>
Operacja specjalna stringifier
pojawia się dopiero w specyfikacji DOM4.
Składnia Web IDL#
interface DOMTokenList { stringifier; }