数组元素的子元素

时间:2012-12-23 19:05:33

标签: jquery

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

  • 使用“已选择”类查找所有元素(让我们将它们称为框以避免混淆)并为每个元素分配一个数字。
  • 在每个框中,找到其中的所有输入元素。
  • 对每个输入元素的名称添加它的框号。例如,如果在第3个框中有一个名为“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不是一个功能。

我做错了什么?

3 个答案:

答案 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);
    }
}

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

    var boxes = $('.chosen');
    
  2. 考虑在jQuery中使用更常见的each()函数,而不是for循环。结合使用prop() as a setter并提供功能,您可以将代码简化为:

    $('.chosen').each(function (i) {
        $(this).children('input').prop('name', function (j, curr) {
            return curr + (i+1);
        });
    });