如何迭代htmlCollection

时间:2014-03-27 11:49:06

标签: javascript jquery backbone.js

我遇到了一些困难。在Backbone中,我有这样的功能:

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

在这种情况下,this是一个textbox,位于tablediv内。然后:

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'

为什么我不能迭代这个对象并访问其中的对象?

由于

更新

这是一个小提琴:http://jsfiddle.net/HX8RL/14/

基本上,应该发生的是:当文本框发生变化时,我想迭代tb父表中的所有行并总结所有Tb值。请记住,所有tb都处于相同的单元格位置,因为在其他地方可能还有其他tb,我不想包括。

3 个答案:

答案 0 :(得分:2)

不会有TBody的任何集合 尝试使用children()代替

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

Demo Fiddle

答案 1 :(得分: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);
    }

请参阅小提琴 - http://jsfiddle.net/HX8RL/18/

答案 2 :(得分:0)

我认为这里有一些问题。你知道每页只能有一个ID吗?所以你必须做document.getElementByid('test')

由于您也在使用jQuery,因此可以使用find函数item.find('#test')。但我认为这不会解决你的问题。不确定你想要达到什么目标,如果你详细解释一下你的问题,我可以帮助你。

另外

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

可以写成(在jQuery中)

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

我已经设置了fiddle,也许它可以帮到你。

小提琴中使用的代码:

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();