2017-05-23 2 views
0

Wie kann ich überprüfen, dass zwei jQuery-Objekte über gleichwertige Funktionen verfügen, dh dieselben Tag-Namen, Attribute, Werte und Textinhalte?jQuery-Objektäquivalenztest (tiefer Vergleich des Inhalts, nicht Identität)

Diese Frage ist nicht ein Duplikat (Inhalt weise oder Identität weise) von einem dieser:

Die meisten davon gelten für ausgewählte nicht synthetisierte Elemente und werden wie folgt beantwortet: Vergleichen Sie DOM-Objekte mit [0] oder .get (0); oder nach jQuery 1.6 benutze .is(). Übrigens, was ist mit der ganzen Duplikation? Jedenfalls funktionieren diese Methoden nicht für diesen Zweck. Beispiel:

var xx = $('<a>', {href: '#'}).append($('<b>').text('foo')); 
var yy = $('<a>', {href: '#'}).append($('<b>').text('foo')); 
var zz = $('<a>', {href: '#'}).append($('<b>').text('foobar')); 

ich eine Funktion wollen, nennen Sie es same_contents(), das würde so funktionieren:

> same_contents(xx, yy) 
true 
> same_contents(xx, zz) 
false 

Aber keiner der einfachen oder klassische Weise tun dies, weil sie letztlich Identität zu vergleichen nicht Inhalt:

> xx == yy 
false 
> xx == zz 
false 

> xx[0] == yy[0] 
false 
> xx[0] == zz[0] 
false 

> xx.is(yy) 
false 
> xx.is(zz) 
false 

für diesen Vergleich Mein Ziel, dass ein komplexer Objektbaum genau über Brute-Force mit zwei verschiedenen Methoden neu synthetisiert wurde zu prüfen ist, im Vergleich zu über weniger repetitiven Funktionsaufrufe.

Antwort

0

Generieren und vergleichen Sie Raw HTML.

function same_contents($x, $y) { 
    return $x[0].outerHTML == $y[0].outerHTML; 
} 

Dann:

> same_contents(xx, yy) 
true 
> same_contents(xx, zz) 
false 

Vorsicht Falschnegative für dumme Gründe:

> same_contents($('<a>', {href: '#', title: 'x'}), $('<a>', {href: '#', title: 'x'})) 
true 
> same_contents($('<a>', {href: '#', title: 'x'}), $('<a>', {title: 'x', href: '#'})) 
false 

Wenn das ein Problem ist, vielleicht ein normalizer helfen würde.

+1

Ich frage mich, ob innerHTML wäre besser, da die Methode same_contents ist, die möglicherweise den Wunsch, nur den Inhalt zu vergleichen, anstatt auch die obersten Eltern auch vergleichen. – Taplar

Verwandte Themen