递归禁用元素的所有子元素

时间:2011-01-29 17:13:35

标签: jquery

这可能是一个是/否类型的问题。

我正试图在jquery中禁用一个元素的所有子元素。

调用

$('#id_of_an_element').children().do(function(){
    do_something;
});

以递归方式调用元素的所有子元素,或仅do_somethingan_element的所有直接后代进行调用?

感谢帮助,

约什

3 个答案:

答案 0 :(得分:70)

  

给出一个代表的jQuery对象   一组DOM元素,.children()   方法允许我们搜索   这些元素的直接孩子   在DOM树中构造一个新的   来自匹配的jQuery对象   元素。 .find()和.children()   方法是相似的,除了   后者只有一个级别   在DOM树下面。另请注意   大多数jQuery方法,.children()都可以   不返回文本节点;得到所有   孩子们包括文字和评论   节点,使用.contents()。

http://api.jquery.com/children/

如果你想对任何嵌套级别的所有后代采取行动,你可以这样做:

$('#id_of_an_element').find('*').attr('disabled', true);

或使用后代选择器:

$('#id_of_an_element *').attr('disabled', true);

答案 1 :(得分:5)

由于您想要影响所有后代,只需执行以下操作:

$('#id_of_an_element *').each(function() {
    // do something
});

但我很想知道你究竟在做什么。

disabled属性对于许多元素类型都没有意义。可能无论你做什么都将受益于CSS的继承。

或者如果你真的想要disabled属性,那么你也可以只定位form元素。

$('#id_of_an_element :input').attr('disabled','disabled');

答案 2 :(得分:2)

你可以做到

function disableChildren(obj) {
    obj.children().each(function(i, val) {
         disable(val);
         disableChildren(val);
    });
}

disableChildren($("#id"));

请参阅.each似乎没有.do方法。

当你说“禁用”

时,你必须实施disable作为一个功能来做你想做的事情。