这可能是一个是/否类型的问题。
我正试图在jquery中禁用一个元素的所有子元素。
调用
$('#id_of_an_element').children().do(function(){
do_something;
});
以递归方式调用元素的所有子元素,或仅do_something
对an_element
的所有直接后代进行调用?
感谢帮助,
约什
答案 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
作为一个功能来做你想做的事情。