JQuery ближе всего к фильтру атрибутов

Поддерживает ли jQuery 1.5.1 атрибуты выбора атрибутов в ближайшем методе?

Учитывая приведенную ниже структуру, el представляет флажок со значением 513, и я пытаюсь дотянуться и проверить флажок предка со значением 0 с помощью

$(el).closest("input[value='0']")[0].checked = true;

но селектор ничего не возвращает.

Я пропустил что-то глупое?

enter image description here


ИЗМЕНИТЬ

Вздох, поэтому флажок со значением 0 не является предком для el, а просто родственником предка ul. Я получил его для работы с

$(el).closest("ul").siblings("input[value='0']")[0].checked = true;

Но у нас там более чистый способ схватить его?

Ответ 1

Метод .closest() поддерживает селектора атрибутов так же, как и любой другой метод jQuery (хотя я не знаю о конкретной версии jQuery, которую вы упомянули), но проблема здесь в том, что .closest() не просто смотрит в общую близость, она поднимается через предков. Вы пытаетесь выбрать элемент ввода, который не является предком элемента, с которого вы начинаете. (Учитывая, что входы не могут содержать другие элементы, они никогда не станут предками чего-либо...)

Вы должны иметь возможность сделать это, сначала выбрав целевой элемент checkbox parent li:

$(el).closest('li:has(input[value="0"])')
     .find('input[value="0"]').prop("checked",true);

Демо: http://jsfiddle.net/Vpzyj/

Конечно, если бы вы смогли добавить класс в пункты меню верхнего уровня, вам не нужно было бы вмешиваться в ": has", вы могли бы просто сказать:

$(el).closest('li.topMenu').find('input[value="0"]').prop("checked",true);

Ответ 2

Я считаю, что вам не нужно [0], поскольку .closest возвращает только первый найденный элемент, отличный от parent(), который возвращает несколько.

$(el).closest("input[value='0']").prop("checked") = true;

- это то, как я бы предпочел сделать это.

Предполагается, что вы пытаетесь проверить флажок "значение 0" при проверке флажка 513.

Изменить: Извините, неправильно прочитайте это. На самом деле вам нужно попытаться получить тег <\li > а затем установить базовый флажок. Если вы действительно ищете флажок, который не является прямым родителем.

Изменить 2: Вы понимаете, что ваше редактирование не работает правильно? Подожди... это бы... ты использовал братьев и сестер, а не детей, мою ошибку.

Изменить 3: Как насчет использования:

$(el).parents().get(':eq(2)').children(':first-child');

или мы не предполагаем, что макет исправлен?

Ответ 5

Относительно вашего вопроса: да, он делает (http://api.jquery.com/closest/)

Ваш код не работает, потому что ближайший() идет вверх по дереву DOM, и в вашем случае ему придется идти вверх и вниз, потому что ваш флажок 0 не является предком флажка 513.