[英]How to iterate over htmlCollection
我对此有些困难。 在Backbone中,我有一个这样的函数:
functionOne: function(){
$('#myTExtbox-' + budgetLine.attr('id')).on('change keyup paste', function(){
that.mySecondFunction(this);
});
}
在这种情况下, this
是一个textbox
,它位于div
中的table
。 然后:
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都处于相同的单元格位置,因为在其他地方我可能不想包含其他tb。
不会有任何TBody
集合尝试使用children()
代替
$.each(tbody.children('tr'), function(index, item){
cost = item;
var t= index;
});
直接迭代所有输入元素以获取值。
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);
}
我认为这里有一些问题。 你知道每页只能有一个ID吗? 所以你必须改为使用document.getElementByid('test')
。
由于您还使用jQuery,因此可以使用find函数item.find('#test')
。 但我认为这不会解决你的问题。 不知道你想要达到什么目标,如果你详细解释一下你的问题是什么,也许我会帮助你。
也
tb.parentElement.parentElement.parentElement.parentElement.parentElement;
可以写成(在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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.