jQuery每个函数都不工作需要替换每个属性

时间:2011-04-12 09:57:55

标签: jquery each attr substr

我有这个HTML

<form method="POST" action="" id="order" class="forms">
    <div>
        <span class="col1">Ref.</span>
        <span class="col2">Number</span>
        <span class="col3">Color</span>
        <span class="col4">Remarks</span>
        <span class="col5">Prijs</span>
    </div>
    <div class="order">
        <input type="text" name="ref-1" class="col1" />
        <input type="text" name="num-1" class="col2" />
        <input type="text" name="color-1" class="col3" />
        <input type="text" name="remark-1" class="col4" />
        <input type="text" name="price-1" class="col5" />
    </div>
    <a id="add" href="#">+</a>
</form>

这个jquery

$("#add").click(function() {     
    $("#order").children(":eq(1)").clone().each(function() {
            var index = $("#order").children().length - 1;
            alert(index);

        $(this).children().find(":input").each(function() {

                alert(index);

                    $(this).attr("[name]", function(i, v) {

                        return v.substr(0, v.lastIndexOf("-") + 1) + index;

                    }).val("");

                });
    }).insertBefore("#add");
});

我需要将每个输入名称的-1部分替换为递增的值。 但是js永远不会进入$(this).attr()函数 当我运行此代码时,单击#add

时,它不会显示第二个警告框

2 个答案:

答案 0 :(得分:3)

我没有检查过你的整个代码,但是

中有一个明显的错误
.attr("[name]"

应该是

.attr("name"

您还需要从

行中删除.children()
$(this).children().find(":input")

并制作

$(this).find(":input")

这是因为this指的是包含输入的div元素。通过运行.children(),它返回input元素,并通过执行find(),它不返回任何内容,因为查找所选元素内部,而不包括它运行的元素。

http://jsfiddle.net/gaby/TpmdP/更新了jsfiddle

答案 1 :(得分:0)

删除.find(“:input”)并将“:input”作为参数传递给.children()。 children()甚至可以通过过滤元素来检索子元素。