为什么可以't我删除所有子项的一个属性

Why can't I remove an attribute of all children?

本文关键字:属性 一个 删除 为什么      更新时间:2023-09-26

我有一个克隆的div,其中包含输入元素,所有这些元素都被禁用。我尝试使用下面的JQuery代码来删除div的每个子级的disabled属性。

clonedElement.children().removeAttr('disabled');

我没有大量的JQuery经验,所以我可能误解了它的工作方式。我应该如何从克隆节点的所有子节点中删除"disabled"属性?

如果有帮助的话,clonedElement是用JQuery.clone()方法创建的。

HTML我正在使用测试---

        <div id="original_item" class="hidden">
            <div class="row_submit">
                <div class="med_field">
                    <p>Product:</p>
                    <select name="product[]">
                        <option></option>
                    </select>
                </div>
                <div class="small_field">
                    <p>Type:</p>
                    <select name="type[]">
                        <option></option>
                    </select>
                </div>
                <div class="small_field">
                    <p>Price:</p>
                    <input type="text" name="price[]" value="test" disabled="disabled" />
                </div>
                <div class="small_field">
                    <p>Quantity:</p>
                    <input type="text" name="quantity[]" />
                </div>
                <img onclick="removeItem(this);" title="Remove Item" style="margin: 18px 0 0 12px;" src="icons/cancel.gif" />
            </div>
            <input type="hidden" name="warehouse_data[]" />
        </div>

children只查找直属子项,如果clonedElement不是med_field/small字段之一,则它将不起作用。

您可以使用find()来搜索直系子代以外的元素。

//for jQuery < 1.6
$("*", clonedElement).removeAttr("disabled");
//or
clonedElement.find("*").removeAttr("disabled");
//for jQuery >= 1.6
$("*", clonedElement).removeProp("disabled");
//or
clonedElement.find("*").removeProp("disabled");

jQuery<1.6您当前的代码应该可以工作。

jQuery 1.6+这样做:clonedElement.children().removeProp('disabled');

请参阅此问题.pr()与.attr(),了解

的原因

只要clonedElement是jquery元素,就可以执行:

clonedElement.children().each(function() {
    $(this).removeAttr('disabled');
});