2017-01-08 1 views
1

Wie zwei CSS-Selektoren auf Javascript vergleichen?Wie zwei CSS-Selektoren zu vergleichen?

Zum Beispiel:

compare('.foo.bar', '.bar.foo') 

kehrt true,

compare('.foo.bar', '.foo .bar') 

kehrt false

+3

Was ist der Anwendungsfall für diese Funktion, welches Problem versuchen Sie zu lösen? Und wie weit bist du gekommen, als du es selbst versucht hast? –

+1

Ich versuchte es mit Regex. Es scheint schwer zu sein. Dann dachte ich daran, zwei Dummy-Elemente mit zwei sehr einfachen Stilregeln zu erstellen und dann die Regel –

+0

zu vergleichen. Ihre Beispiele ergeben für mich Sinn, dass alles in Ordnung zu sein scheint. Verstehst du den Unterschied, den der Raum macht? –

Antwort

1
'.foo.bar' is not the same as '.foo .bar' 

Beachten Sie den Raum in '.foo .bar'

ZB:

<div class="foo"><p class="bar"></p></div> The tag P matches '.foo .bar' 

<div class="foo bar"><p class="bar"></p></div> The tag DIV matches '.foo.bar' 

Für diejenigen, die Vergleichsfunktion sucht, können Sie http://api.jquery.com/is/

document.body.textContent = $('.foo.bar').is('.bar.foo')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="foo bar"></div>

Vanilla JS Lösung verwenden:

document.body.textContent = compareSelector('.foo.bar', '.bar.foo'); 
 

 
function compareSelector (s1, s2) { 
 
    var a = document.querySelectorAll(s1); 
 
    var b = document.querySelectorAll(s2); 
 
    if (a.length !== b.length) 
 
    return false; 
 
    else { 
 
    for(var i=0; i<a.length; i++){ 
 
     if (a[i] !== b[i]) return false; 
 
    } 
 
    } 
 
    return true; 
 
}
<div class="foo bar"></div> 
 
<p class="bar foo"></p>

+0

Jemand möchte die Frage schließen, es ist zu breit. WTF !? – rafaelcastrocouto

+4

Es gibt kein jQuery-Tag für diese Frage. –

+0

Sie haben Recht David, ich würde gerne eine Vanille JS Lösung sehen, PLZ post es! – rafaelcastrocouto