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");
    }
}

Skrzypek tutaj

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?

1
user1555863 17 sierpień 2014, 12:22

2 odpowiedzi

Najlepsza odpowiedź

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/

3
Halil Bilgin 17 sierpień 2014, 08:32

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/

0
wildhaber 17 sierpień 2014, 08:37