我是jQuery的初学者,这就是我要做的事情:
这是我到目前为止所做的代码:
boxes = $('.chosen');
for(a = 0; a < boxes.length; a++) {
inputsinboxes = boxes[a].children('input');
for(b = 0; b < inputsinboxes.length; b++) {
inputsinboxes[b].name = inputsinboxes[b].name + (a+1);
}
}
我被困了,因为它一直告诉我boxes[a].children
不是一个功能。
我做错了什么?
答案 0 :(得分:3)
当您使用数组索引表示法(括号)从jQuery对象访问元素时,您不会返回jQuery对象。您将获得底层DOM节点。 http://api.jquery.com/get/
首先使用.each()
制作更具惯用性的jQuery:
$('.chosen').each(function (i) {
$(this).children('input').prop('name', function () {
return this.name + (i+1);
});
});
答案 1 :(得分:3)
您将原始javascript直觉与jquery的运行方式混合在一起。试试这个尺寸
$('.chosen').each(function(index) {
$('input', this).each(function() {
$(this).attr('name', $(this).attr('name') + (index + 1));
});
});
答案 2 :(得分:1)
boxes[a]
是DOMElement
,不是jQuery对象;所以你不能在它上面使用jQuery children()
方法。
相反,你必须首先将它包装在jQuery对象中:
boxes = $('.chosen');
for(a = 0; a < boxes.length; a++) {
inputsinboxes = $(boxes[a]).children('input');
for(b = 0; b < inputsinboxes.length; b++) {
inputsinboxes[b].name = inputsinboxes[b].name + (a+1);
}
}
另请注意,您应该使用var
声明变量,以阻止它们成为隐式全局变量;
var boxes = $('.chosen');
考虑在jQuery中使用更常见的each()
函数,而不是for
循环。结合使用prop()
as a setter并提供功能,您可以将代码简化为:
$('.chosen').each(function (i) {
$(this).children('input').prop('name', function (j, curr) {
return curr + (i+1);
});
});