Подтвердить что ты не робот

Рекурсивное отключение всех дочерних элементов элемента

Это может быть вопрос типа "да/нет".

Я пытаюсь полностью отключить всех дочерних элементов элемента jquery.

Вызывает ли вызов

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

рекурсивно вызывать все дочерние элементы элемента или просто do_something для всех прямых потомков an_element?

Помогите оценить,

Джош

4b9b3361

Ответ 1

Учитывая объект 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);

Ответ 2

Поскольку вы хотите повлиять на всех потомков, просто выполните следующее:

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

Но мне было бы интересно узнать, что именно вы делаете.

Свойство disabled не имеет смысла для многих типов элементов. Возможно, что все, что вы делаете, выиграет от наследования CSS.

Или, если вы действительно хотите свойство disabled, тогда вы можете просто нарисовать элементы form.

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

Ответ 3

Вы можете сделать

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

disableChildren($("#id"));

См. .each Не существует метода .do.

Вам нужно реализовать disable как функцию, чтобы делать то, что вам нужно, когда вы говорите "отключить"