2014-03-27 37 views
4

我在這方面遇到了一些困難。在骨幹網,我有這樣的功能:如何迭代htmlCollection

functionOne: function(){ 
     $('#myTExtbox-' + budgetLine.attr('id')).on('change keyup paste', function(){ 
      that.mySecondFunction(this); 
     }); 
} 

在這種情況下,thistextbox,這在table,一個div內。然後:

mySecondFunction: function(tb){ 
     var tbody = tb.parentElement.parentElement.parentElement.parentElement.parentElement; 
     //gets main parent, which is a tbody, inside a table, inside a div 

} 

我再想迭代tbody,要經過的每一行,並找到在特定小區的textbox。問題是這個代碼:

$.each(tbody, function(index, item){ 
     cost = item; 
     var t= index; 
    }); 

似乎不允許我去任何項目。在這個例子中,如果我嘗試做這樣的事情:

item.getElementById('test'); 

我得到一個錯誤:

TypeError: Object #<HTMLCollection> has no method 'getElementById' 

爲什麼我不能遍歷中此對象和訪問對象?

感謝

UPDATE

這裏有一個小提琴:http://jsfiddle.net/HX8RL/14/

從本質上講,應該發生的事情是這樣的:當一個文本框的變化,我想遍歷在結核病的所有行父表和總和所有的Tb值。請記住,所有的tb都處於同一個單元格位置,因爲在其他地方可能會有其他tb,我不想包括在內。

+0

嘗試項目[指數] .getElementById( '測試'),看看這是否正常工作; – Ashutosh

+1

感謝您的迴應。是的,我已經試過了,無濟於事 – jason

+0

創建一個小提琴。 – Ashutosh

回答

2

有不會是TBody 任何集合嘗試使用children()代替

$.each(tbody.children('tr'), function(index, item){ 
     cost = item; 
     var t= index; 
    }); 

Demo Fiddle

+0

我得到一個錯誤「Uncaught TypeError:對象#的屬性'children'不是函數」 – jason

+1

其實,這導致我最終的解決方案。而不是tbody.children('tr'),它是tbody.rows。謝謝 – jason

+0

[2015年12月]我在搜索過程中找到了這個答案,它不適合我的目的。對於任何可能遇到這種情況的人來說,迭代htmlcollection的工作是一個基本的JavaScript for循環。乾杯。 –

0

我想這裏有一些事情出錯了。你知道你每頁只能有一個ID嗎?所以你必須改爲document.getElementByid('test')

由於您也在使用jQuery,因此您可以使用查找功能item.find('#test')。但我認爲這不會解決你的問題。不知道你想達到什麼目的,也許我可以幫助你,如果你更詳細地解釋你的問題是什麼。

而且

tb.parentElement.parentElement.parentElement.parentElement.parentElement; 

可我設置一個fiddle寫成(jQuery中)

$(tb).parents('tbody'); 

,也許它可以幫助你。在撥弄使用

代碼:

var myFuncs = (function() { 

    function funcA() { 
     $('input').on('keyup', function() { 
      funcB(this); 
     }); 
    } 

    function funcB(myInput) { 
     var $table = $(myInput).parents('table'); 

     $table.find('tr > td > input').each(function() { 
      var $input = $(this); 

      if($(myInput).attr('id') != $input.attr('id')) 
       $input.val("I'm called from another input"); 
     }); 
    } 

    return { 
     funcA : funcA 
    } 

})(); 

myFuncs.funcA(); 
1

迭代所有輸入元素直接拿值。

var tbody = tb.parentElement.parentElement.parentElement; 
    alert(tbody.id); 
    var input = $('#tbody').find('input'); 
    alert(input); 
    console.log(input); 
    for (var i = 0; i < input.length; i++) { 
     alert(input[i].value); 
     alert(i); 
    } 

見fiddle- http://jsfiddle.net/HX8RL/18/