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');
или мы не предполагаем, что макет исправлен?
Ответ 3
Проверить: http://api.jquery.com/closest/
.closest( selector ) // version added: 1.3
Ответ 4
Ближайшие проверки вверх дерево DOM, а не на том же уровне.
Ответ 5
Относительно вашего вопроса: да, он делает (http://api.jquery.com/closest/)
Ваш код не работает, потому что ближайший() идет вверх по дереву DOM, и в вашем случае ему придется идти вверх и вниз, потому что ваш флажок 0 не является предком флажка 513.