Zastanawiam się nad nieruchomościami IntreText. Rozważ następującą znaczniki:
HTML
<div class="myClass">
<div>
<div>foo</div>
</div>
</div>
<div class="myClass">
<div>
<div>bar</div>
</div>
</div>
Następnie uruchommy następujący kod:
JS
var a = document.querySelectorAll('div.myClass');
//var a = document.querySelectorAll('div.myClass div div');
for (var i=0; i<a.length; i++){
console.log(a[i].innerText);
if (a[i].innerText == "foo"){
console.log("found");
}
}
Uruchamianie tego kodu jak jest, wyjścia foo
i pusta linia, a następnie bar
.
Jeśli skomentuję pierwszy wiersz skryptu i odkomentuję drugi, który następnie zamyka się na dokładnym poziomie div, zawierających tekst, ten kod wyjściowy foo
, found
, found
}}.
Moje pytanie tutaj brzmi: Jeśli na pierwszej iteracji wyjścia skryptu foo
, jak przyjdź a[i].innerText == "foo"
nie jest true
? Och, a gdzie jest ta pusta linia?
2 odpowiedzi
Ponieważ myClass ma 2 div wewnątrz siebie, javascript widzimy je jako linię "n" i stąd "foo" nie jest równy "foo n"
Ale jeśli zmienimy taki kod:
if (a[i].innerText == "foo\n"){
console.log("found");
}
Następnie możesz zobaczyć znalazł dziennik konsoli. http://jsfiddle.net/3149H95/5/
Jako alternatywa dla odpowiedzi halilin bilgin możesz trim
wewnętrzny tekst, aby usunąć \n
W tym przykładzie użyłem jQuery.trim()
:
for (var i=0; i<a.length; i++){
console.log(a[i].innerText);
if (jQuery.trim(a[i].innerText) == "foo"){
$("pre").text("found:"+a[i].innerText);
console.log("found");
}
}
http://jsfiddle.net/82L9G868/2/