2017-05-14 54 views
1

我嘗試從特定document.querySelectorAll()的迭代中獲取列表。我用這個迭代:在單個命令中工作但不在迭代中的命令

for (i = 0; i < document.querySelector('li[dat*="era"]').length; ++i) { document.querySelectorAll('li[dat*="era"] ul li.title div')[i].textContent } 

它給我回個錯誤:

Uncaught TypeError: Cannot read property 'textContent' of undefined at <anonymous>:2:64 

它只能當我使用一個單值

document.querySelectorAll('li[dat*="era"] ul li.title div')[0].textContent 

怎麼可能作爲一個工作單一的命令,但不是一個迭代?

例HTML:

<li id="r01" dat="era"> 
    <ul class="ref"> 
     <li class="sth"> </li> 
     <li class="title"> 
      <div> 
       Text 1 for retrieve 
      </div> 
     </li> 
    <ul> 
</li> 
<li id="r02" dat="era"> 
    <ul class="ref"> 
     <li class="sth"> </li> 
     <li class="title"> 
      <div> 
       Text 2 for retrieve 
      </div> 
     </li> 
    <ul> 
</li> 
+1

爲什麼是長度和內容的不同選擇? –

+0

@NinaScholz它給出了相同的結果。即使我將長度選擇符更改爲30,但錯誤仍然相同 – Astetr

+0

可以發佈HTML嗎? –

回答

1
嘗試

下面的代碼片斷

// Your code, doesnt throw error what you have specified. 
 
// But when document.querySelector returns null(when theres no specified tag, it throws 
 

 
for (i = 0; i < document.querySelector('li[dat*="era"]').length; ++i) { document.querySelectorAll('li[dat*="era"] ul li.title div')[i].textContent } 
 

 

 
// Use document.querySelectorAll(...) once for performance 
 
var l = document.querySelectorAll('li[dat*="era"] ul li.title div') 
 
for (i = 0; i < l.length; ++i) { 
 
    console.log(l[i].textContent) 
 
}
<li id="r01" dat="era"> 
 
    <ul class="ref"> 
 
    <li class="sth"> sth 1 </li> 
 
    <li class="title"> 
 
     <div> 
 
     Text 1 for retrieve 
 
     </div> 
 
    </li> 
 
    </ul> 
 
</li> 
 
<li id="r02" dat="era"> 
 
    <ul class="ref"> 
 
    <li class="sth">sth 2</li> 
 
    <li class="title"> 
 
     <div> 
 
     Text 2 for retrieve 
 
     </div> 
 
    </li> 
 
    </ul> 
 
</li>

+0

非常感謝。第二種解決方案適用於我。 – Astetr

相關問題