JQuery Определить, имеет ли сопоставленный класс данный идентификатор

Что такое jQuery, имеет эквивалент id следующего утверждения?

$('#mydiv').hasClass('foo')

чтобы вы могли указать имя класса и проверить, что он содержит предоставленный идентификатор.

что-то вроде:

$('.mydiv').hasId('foo')

Ответ 1

Вы можете выпекать эту логику в селекторе комбинируя несколько селекторов. Например, мы могли бы нацеливать все элементы с заданным id, которые также имеют определенный класс:

$("#foo.bar"); // Matches <div id="foo" class="bar">

Это должно выглядеть похоже на то, что вы пишете в CSS. Обратите внимание, что это не относится ко всем элементам #foo (хотя должно быть только одно), и оно не будет применяться ко всем элементам .bar (хотя их может быть много). Он будет ссылаться только на элементы, которые соответствуют двум атрибутам.

jQuery также имеет отличный метод .is, который позволяет определить, обладает ли элемент определенными качествами. Вы можете протестировать коллекцию jQuery против селектора строк, элемента HTML или другого объекта jQuery. В этом случае мы просто проверим его против селектора строк:

$(".bar:first").is("#foo"); // TRUE if first '.bar' in document is also '#foo'

Ответ 2

Я бы, вероятно, использовал $('.mydiv').is('#foo'); Если бы вы знали Id, почему бы вам просто не применить его к селектору в первую очередь?

Ответ 3

Я знаю его старый вопрос, но он все еще на вершине результатов Google, новый jQuery предоставляет .has() функцию

$('.mydiv').has('#foo')

Ответ 4

Скажем, что вы выполняете итерацию через некоторые объекты DOM, и вы хотите найти и поймать элемент с определенным идентификатором

<div id="myDiv">
    <div id="fo"><div>
    <div id="bar"><div>
</div>

Вы можете написать что-то вроде поиска

$('#myDiv').find('#bar')

Обратите внимание, что если вы должны использовать селектор классов, метод find вернет все соответствующие элементы.

или вы можете написать функцию итерации, которая будет выполнять более сложную работу.

<div id="myDiv">
    <div id="fo"><div>
    <div id="bar"><div>
    <div id="fo1"><div>
    <div id="bar1"><div>
    <div id="fo2"><div>
    <div id="bar2"><div>
</div>

$('#myDiv div').each(function() {
   if($(this).attr('id') == 'bar1')
       //do something with bar1
});

Такой же код можно легко изменить для селектора классов.

<div id="myDiv">
    <div class="fo"><div>
    <div class="bar"><div>
    <div class="fo"><div>
    <div class="bar"><div>
    <div class="fo"><div>
    <div class="bar"><div>
</div>

$('#myDiv div').each(function() {
   if($(this).hasClass('bar'))
       //do something with bar
});

Я рад, что вы решили свою проблему с помощью index(), что когда-либо работает для вас. Я надеюсь, что это поможет другим с той же проблемой. Приветствия:)

Ответ 5

$('#' + theMysteryId + '.someClass').each(function() { /* do stuff */ });

Ответ 6

Просто чтобы сказать, что я в конце концов решил это, используя index().

НИЧЕГО не работало другое.

Итак, для элементов сиблинга это хорошая работа, если вы сначала выбираете общий класс, а затем хотите изменить что-то по-разному для каждого конкретного.

EDIT: для тех, кто не знает (например, меня) index() дает значение индекса для каждого элемента, который соответствует селектору, считая от 0, в зависимости от их порядка в DOM. Пока вы знаете, сколько элементов есть с class= "foo", вам не нужен идентификатор.

Очевидно, что это не всегда поможет, но кому-то это может показаться полезным.

Ответ 7

Проверьте, существует ли идентификатор элемента

if ($('#id').attr('id') == 'id')
{
  //OK
}

Ответ 8

Вы также можете проверить, используется ли элемент id:

if(typeof $(.div).attr('id') == undefined){
   //element has no id
} else {
   //element has id selector
}

Я использую этот метод для глобальных dataTables и конкретных упорядоченных данныхTables