molily: Self Beispiel funktioniert im FF nicht? contains() ??

Beitrag lesen

Hallo,

return !!(this.compareDocumentPosition(arg) & 16);

Was aber macht "prototype" und "compareDocumentPosition"?

compareDocumentPosition ist eine Methode aus DOM 3 Core und macht das besagte: Die Position zweier Knoten im Knotenbaum des Dokuments miteinander vergleichen.

knoten1.compareDocumentPosition(knoten2);

Zurückgegeben wird eine Bit-Maske. Die Bits haben folgende Bedeutung (Auszug aus dem Standard mit Hexadezimalzahlen und von mir ergänzt mit Binärzahlen):

DOCUMENT_POSITION_DISCONNECTED = 0x01;            // 000001
DOCUMENT_POSITION_PRECEDING    = 0x02;            // 000010
DOCUMENT_POSITION_FOLLOWING    = 0x04;            // 000100
DOCUMENT_POSITION_CONTAINS     = 0x08;            // 001000
DOCUMENT_POSITION_CONTAINED_BY = 0x10;            // 010000
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20; // 100000

Siehe
http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1950641247
<[link:http://www.w3.org/TR/DOM-Level-3-Core/core.html#DocumentPosition>]

In dem Fall, dass der knoten1 den knoten2 enthält, wird dezimal 20 (binär 10100) zurückgegeben, d.h. die Bits für CONTAINED_BY und FOLLOWING sind gesetzt.

Will ich nun wissen, ob in der Bitmaske das Bit für CONTAINED_BY (dezimal 16, dual 010000) gesetzt ist, mache ich eine Bitweise Maskierung, rechne also das Ergebnis & 16. Im positiven Falle bekomme ich wieder 16 zurück, andernfalls 0.

Das ist eigentlich alles. Mit !! wird das Ergebnis noch in Boolean umgewandelt, damit die Funktion entweder true oder false zurückgibt. Man könnte auch einfach Boolean(...) schreiben.

Mathias