2014-03-27 38 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/