我遇到了一些困难。在Backbone中,我有这样的功能:
functionOne: function(){
$('#myTExtbox-' + budgetLine.attr('id')).on('change keyup paste', function(){
that.mySecondFunction(this);
});
}
在这种情况下,this
是一个textbox
,位于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'
为什么我不能迭代这个对象并访问其中的对象?
由于
更新
这是一个小提琴:http://jsfiddle.net/HX8RL/14/
基本上,应该发生的是:当文本框发生变化时,我想迭代tb父表中的所有行并总结所有Tb值。请记住,所有tb都处于相同的单元格位置,因为在其他地方可能还有其他tb,我不想包括。
答案 0 :(得分:2)
不会有TBody
的任何集合
尝试使用children()
代替
$.each(tbody.children('tr'), function(index, item){
cost = item;
var t= index;
});
答案 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();