2017-02-14 60 views
0

我正試圖找到所有具有以'。'開頭的id的行。和一些信件。當我用這個字符串調用getElementsByIdStartsWith時,即使我可以看到(並檢查)它們,也不會返回任何行。以子串開頭的行

我的錯誤在哪裏?

getElementsByIdStartsWith: function (optionSymbolRoot) { 
     var idArr = []; 

     var trs = document.getElementById("tr"); 

     for(var i=0; i<trs.length; i++) 
     { 
      var s = trs[i].id; 
      if(true == s.startsWith(optionSymbolRoot)) 
       idArr.push(trs[i]); 
     } 

     return idArr; 
    },  
ToggleRow : function(rootId) { 

     var s = "."; 
     var dottedSymbol = s.concat(rootId); 
     //process.stdout.write(dottedSymbol);   

     var rows = this.getElementsByIdStartsWith(dottedSymbol); 
     rows.forEach(function(row) 
     { 

     if (row.style.display == "") { 
      row.style.display = "none"; 
     } 
     else { 
      row.style.display = ""; 
     } 
     }); 
    }, 
+3

對於初學者 「開頭」, 'document.getElementById'返回一個具有指定id的單個元素。您可能正在尋找['getElementsByTagName'](https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByTagName) – Hamms

+1

您確定它是'getElementbyById'而不是'getElementsByTagName'嗎? –

+0

'row.style.display'可以有多個值,所以在切換時像':'這樣更好地測試'row.style.display = row.style.display =='none'? '':'none''。 – RobG

回答

1

功能getDocumentById只會給一個項目,作爲ids應該是唯一的。如果你想得到這種行爲,我建議使用類而不是id或上面的評論中所述的getElementByTagName

0

您也可以使用querySelectorAll功能

document.querySelectorAll('#id'); 
// This will return a NodeList with all elements that match the criteria. 

function (optionSymbolRoot) { 
    var idArr = []; 

    var trs = document.querySelectorAll("tr"); 

    for(var i=0; i<trs.length; i++) 
    { 
     var s = trs[i].className; 
     if(true == s.startsWith(optionSymbolRoot)) 
      idArr.push(trs[i]); 
    } 

    return idArr; 
} 
0

document.getElementById獲取具有指定id屬性的單個元素。要獲取頁面上所有的<tr>標籤,您可以使用getElementsByTagNamequerySelectorAll

var rows = document.getElementsByTagName('tr'); 

//OR 

var rows = document.querySelectorAll('tr'); 

第二種方法是更靈活,因爲它接受任何有效CSS選擇,包括標籤名稱,.classes#ids,但有點慢。