Я хочу применить стиль к определенному div. Например, во время загрузки будут показаны все с классом foo, но я могу отключить один экземпляр класса foo с идентификатором bar.
Николас Мюррей,
1
Тогда вы просто сделаете, $('#bar.foo').toggle();что у вас будет только один идентификатор, поскольку они НЕОБХОДИМЫ, чтобы быть уникальными для документа. Если вы хотите переключать только этот идентификатор, если он относится к классу, fooпросто добавьте класс в селектор идентификаторов. если селектор найдет пустой набор, ничего не произойдет, если он найдет набор с результатами (из которых будет только один), то он переключит элемент. Я думаю, вы слишком много думаете об этом.
prodigitalson
3
просто сказать, что люди разочаровываются, говоря: «Зачем вам вообще это нужно?» когда я пытаюсь сделать это прямо сейчас. Проблема с hasClass в том, что он возвращает True, если ЛЮБОЙ элемент, который соответствует селектору, имеет данный класс. Итак, когда у меня много p с классом «cake» и дополнительными именами классов для каждого («one», «two» и т. Д.), У меня возникает проблема. Я хочу выбрать общий набор p.cake, а затем иметь условный (если class = "one" - $ var = 23 - и т. Д.). Дело в том, что я пытаюсь передать другой $ var в зависимости от имени дополнительного класса. Я стараюсь не повторять все это целиком
Стелла
Ответы:
171
Вы можете встроить эту логику в селектор, объединив несколько селекторов . Например, мы могли бы настроить таргетинг на все элементы с данным идентификатором, которые также имеют определенный класс:
Это должно быть похоже на то, что вы бы написали в CSS. Обратите внимание, что он не будет применяться ко всем #fooэлементам (хотя должен быть только один) и не будет применяться ко всем .barэлементам (хотя их может быть много). Он будет ссылаться только на элементы, соответствующие обоим атрибутам.
В jQuery также есть отличный .isметод, который позволяет определить, обладает ли элемент определенными качествами. Вы можете протестировать коллекцию jQuery с помощью селектора строк, элемента HTML или другого объекта jQuery. В этом случае мы просто проверим его по селектору строк:
$(".bar:first").is("#foo");// TRUE if first '.bar' in document is also '#foo'
Возможно, код переходит в функцию обратного вызова, которая должна обрабатывать определенный случай по-другому. Итак, функции автоматически передается объект jQuery с неизвестными атрибутами. В этом случае $ ('ваш ответ'). Is ('полезно');
Peter G
1
Я могу придумать любое количество причин. Что делать, если вы хотите применить настройку для мобильных устройств, например, если элемент имеет id = "mobile". Почему не важно.
Дата размещения
Что ж, только 1 элемент должен когда-либо иметь данный, idиначе это должен быть какой-то другой атрибут ... Я полагаю, если структурное расположение рассматриваемого элемента изменяется в зависимости от страницы или клиента / агента пользователя, тогда нормально, но кроме этого .. .
другой альтернативный способ, создать .hasId()плагин
// the plugin
$.fn.hasId =function(id){returnthis.attr('id')== id;};// select first class
$('.mydiv').hasId('foo')?
console.log('yes'): console.log('no');// select second class// $('.mydiv').eq(1).hasId('foo')// or
$('.mydiv:eq(1)').hasId('foo')?
console.log('yes'): console.log('no');
Извините, но я думаю, что вы неправильно истолковали вопрос: has () API сообщает следующее: Сократите набор совпадающих элементов до тех, у которых есть потомок, который соответствует селектору или элементу DOM. OP спрашивает, как проверить, имеет ли элемент с классом myDiv также идентификатор foo, а has () будет искать потомков myDiv с идентификатором foo.
Tilt
7
Допустим, вы просматриваете некоторые объекты DOM и хотите найти и поймать элемент с определенным идентификатором.
Тот же код можно легко изменить для селектора классов.
<divid="myDiv"><divclass="fo"><div><divclass="bar"><div><divclass="fo"><div><divclass="bar"><div><divclass="fo"><div><divclass="bar"><div></div>
$('#myDiv div').each(function() {
if($(this).hasClass('bar'))
//do something with bar
});
Я рад, что вы решили свою проблему с помощью index (), что когда-либо работает для вас. Я надеюсь, что это поможет другим с той же проблемой. Ура :)
каждый из них не нужен, потому что никогда не будет больше одного #theMysteryId.
prodigitalson
2
Что ж, это избавляет вас от необходимости назначать его переменной, проверять, не является ли длина непустой, а затем продолжить код. Если селектор ничего не соответствует, jQuery просто не будет вызывать функцию "each", так что это красиво и чисто. Теперь, если все, что вам нужно сделать, это вызвать какой-нибудь jQuery API, тогда обязательно.
Pointy
4
Просто хочу сказать, что в конце концов я решил эту проблему с помощью index ().
НИЧЕГО больше не работало.
Таким образом, для элементов-братьев это хорошая работа, если вы сначала выбираете общий класс, а затем хотите изменить что-то по-разному для каждого конкретного.
РЕДАКТИРОВАТЬ: для тех, кто не знает (например, я), index () дает значение индекса для каждого элемента, который соответствует селектору, считая от 0, в зависимости от их порядка в DOM. Пока вы знаете, сколько элементов с class = "foo", вам не нужен идентификатор.
Очевидно, это не всегда помогает, но кому-то это может пригодиться.
$('#bar.foo').toggle();
что у вас будет только один идентификатор, поскольку они НЕОБХОДИМЫ, чтобы быть уникальными для документа. Если вы хотите переключать только этот идентификатор, если он относится к классу,foo
просто добавьте класс в селектор идентификаторов. если селектор найдет пустой набор, ничего не произойдет, если он найдет набор с результатами (из которых будет только один), то он переключит элемент. Я думаю, вы слишком много думаете об этом.Ответы:
Вы можете встроить эту логику в селектор, объединив несколько селекторов . Например, мы могли бы настроить таргетинг на все элементы с данным идентификатором, которые также имеют определенный класс:
Это должно быть похоже на то, что вы бы написали в CSS. Обратите внимание, что он не будет применяться ко всем
#foo
элементам (хотя должен быть только один) и не будет применяться ко всем.bar
элементам (хотя их может быть много). Он будет ссылаться только на элементы, соответствующие обоим атрибутам.В jQuery также есть отличный
.is
метод, который позволяет определить, обладает ли элемент определенными качествами. Вы можете протестировать коллекцию jQuery с помощью селектора строк, элемента HTML или другого объекта jQuery. В этом случае мы просто проверим его по селектору строк:источник
is()
. Должен быть.hasId()
селектор только потому, что он кажется очевидным партнером для.hasClass()
действительно ...Я бы, вероятно, использовал
$('.mydiv').is('#foo');
Это сказано, если вы знаете идентификатор, почему бы вам просто не применить его к селектору?источник
id
иначе это должен быть какой-то другой атрибут ... Я полагаю, если структурное расположение рассматриваемого элемента изменяется в зависимости от страницы или клиента / агента пользователя, тогда нормально, но кроме этого .. .обновление: извините, неправильно понял вопрос, удален
.has()
ответ.другой альтернативный способ, создать
.hasId()
плагинисточник
Допустим, вы просматриваете некоторые объекты DOM и хотите найти и поймать элемент с определенным идентификатором.
Вы можете написать что-нибудь вроде найти
Обратите внимание, что если вы использовали селектор классов, метод find вернет все совпадающие элементы.
или вы можете написать итеративную функцию, которая будет выполнять более сложную работу
Тот же код можно легко изменить для селектора классов.
Я рад, что вы решили свою проблему с помощью index (), что когда-либо работает для вас. Я надеюсь, что это поможет другим с той же проблемой. Ура :)
источник
источник
#theMysteryId
.Просто хочу сказать, что в конце концов я решил эту проблему с помощью index ().
НИЧЕГО больше не работало.
Таким образом, для элементов-братьев это хорошая работа, если вы сначала выбираете общий класс, а затем хотите изменить что-то по-разному для каждого конкретного.
РЕДАКТИРОВАТЬ: для тех, кто не знает (например, я), index () дает значение индекса для каждого элемента, который соответствует селектору, считая от 0, в зависимости от их порядка в DOM. Пока вы знаете, сколько элементов с class = "foo", вам не нужен идентификатор.
Очевидно, это не всегда помогает, но кому-то это может пригодиться.
источник
Проверить, существует ли идентификатор элемента
источник
Вы также можете проверить, используется ли элемент id, выполнив следующие действия:
Я использую этот метод для глобальных таблиц данных и определенных упорядоченных таблиц данных
источник