2

我是 jQuery 的初学者,这就是我想要做的事情:

  • 找到所有具有“选择”类的元素(我们称它们为框以避免稍后混淆)并为每个元素分配一个数字。
  • 在每个框中,找到其中的所有输入元素。
  • 在每个输入元素的名称中添加它的框号。例如,如果在第三个框中有一个名为“login”的文本输入元素,则应将其重命名为“login3”。

这是我到目前为止所做的代码:

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不是一个函数。

我究竟做错了什么?

4

3 回答 3

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);
    });
});
于 2012-12-23T19:07:54.647 回答
3

您将原始 javascript 直觉与 jquery 的操作方式混合在一起。试穿这个尺寸

$('.chosen').each(function(index) {
    $('input', this).each(function() {
        $(this).attr('name', $(this).attr('name') + (index + 1));
    });
});
于 2012-12-23T19:08:21.603 回答
1

boxes[a]是一个DOMElement,不是一个 jQuery 对象;所以你不能children()在上面使用jQuery方法。

相反,您必须先将其包装在 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);
    }
}

  1. 另请注意,您应该使用 a 声明变量var以阻止它们成为隐式全局变量;

    var boxes = $('.chosen');
    
  2. 考虑在 jQuery 中使用更常见的each()函数而不是for循环。再加上使用prop()作为设置器并提供函数,您可以将代码缩短为:

    $('.chosen').each(function (i) {
        $(this).children('input').prop('name', function (j, curr) {
            return curr + (i+1);
        });
    });
    
于 2012-12-23T19:08:06.753 回答