если ближайший имеет id в jquery, тогда сделайте что-нибудь [дубликат]

Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.

Пример:

string postalcode=Customer.Address.PostalCode; 
//if customer or address is null , this will through exeption

здесь, если адрес имеет значение null, то вы получите NullReferenceException.

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

string postalcode=Customer?.Address?.PostalCode;
//if customer or address is null , this will return null, without through a exception
87
задан Nicholas Murray 12 February 2010 в 17:45
поделиться

8 ответов

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

$("#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'
142
ответ дан Sampson 4 September 2018 в 09:06
поделиться
  • 1
    +1 для is(). Должен быть селектор .hasId() только потому, что он действительно кажется очевидным партнером .hasClass() действительно ... – Matt Fletcher 13 December 2013 в 17:04

обновление: извините неправильно понял вопрос, удалил .has() ответ.

другой альтернативный способ, создать плагин .hasId()

// the plugin
$.fn.hasId = function(id) {
  return this.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');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="mydiv" id="foo"></div>
<div class="mydiv"></div>

16
ответ дан ewwink 4 September 2018 в 09:06
поделиться
  • 1
    Извините, но я думаю, что вы неверно истолковали вопрос: has () API сообщает об этом: уменьшите набор согласованных элементов до тех, у кого есть потомок , который соответствует элементу селектора или DOM. OP спрашивает, как проверить, имеет ли элемент с классом 'myDiv' идентификатор foo, тогда как () будет искать потомков 'myDiv' с идентификатором 'foo'. – Tilt 30 September 2014 в 11:37

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

<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 (), что когда-либо работает для вас. Я надеюсь, что это поможет другим с той же проблемой. Приветствия:)

7
ответ дан Nima Foladi 4 September 2018 в 09:06
поделиться
$('#' + theMysteryId + '.someClass').each(function() { /* do stuff */ });
4
ответ дан Pointy 4 September 2018 в 09:06
поделиться
  • 1
    каждый из них не нужен, потому что никогда не будет более одного #theMysteryId. – prodigitalson 12 February 2010 в 17:54
  • 2
    Хорошо, это избавляет вас от необходимости назначать его переменной, проверяя, не длинна ли длина, а затем продолжает код. Если селектор не соответствует ничему, jQuery просто не вызовет «каждый», функция, так что это красиво и чисто. Теперь, если все, что вы хотите сделать, это вызвать некоторый jQuery API, тогда обязательно. – Pointy 12 February 2010 в 22:20

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

42
ответ дан prodigitalson 4 September 2018 в 09:06
поделиться
  • 1
    Возможно, код входит в функцию обратного вызова, которая должна обрабатывать определенный случай по-разному. Таким образом, функция передается объекту jQuery автоматически с неизвестными атрибутами. В этом случае $ («ваш ответ») является («полезно»); – Peter G 8 February 2012 в 23:19
  • 2
    Я могу думать о нескольких причинах. Что делать, если вы хотите применить специальные настройки для мобильных устройств, например, если у элемента есть идентификатор = «мобильный». Почему это не важно. – Placeable 29 June 2015 в 14:19
  • 3
    Ну, только 1 элемент должен иметь данный id, иначе он должен быть каким-то другим атрибутом ... Я полагаю, что если структурное расположение рассматриваемого элемента изменяется на основе страницы или клиента / агента пользователя, тогда нормально, но кроме что... – prodigitalson 29 June 2015 в 14:24

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

НИЧЕГО еще не работало.

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

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

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

4
ответ дан Stella 4 September 2018 в 09:06
поделиться

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

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

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

-1
ответ дан user3379167 4 September 2018 в 09:06
поделиться

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

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

3
ответ дан Việt Anh 4 September 2018 в 09:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: