Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.
Пример:
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
Вы можете выпекать эту логику в селекторе , комбинируя несколько селекторов . Например, мы можем настроить таргетинг на все элементы с заданным идентификатором, которые также имеют определенный класс:
$("#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'
обновление: извините неправильно понял вопрос, удалил .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>
Предположим, что вы выполняете итерации через некоторые объекты 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 (), что когда-либо работает для вас. Я надеюсь, что это поможет другим с той же проблемой. Приветствия:)
$('#' + theMysteryId + '.someClass').each(function() { /* do stuff */ });
#theMysteryId
.
– prodigitalson
12 February 2010 в 17:54
Я бы, вероятно, использовал $('.mydiv').is('#foo');
. Если вы знаете Id, почему бы вам просто не применить его к селектору в первую очередь?
id
, иначе он должен быть каким-то другим атрибутом ... Я полагаю, что если структурное расположение рассматриваемого элемента изменяется на основе страницы или клиента / агента пользователя, тогда нормально, но кроме что...
– prodigitalson
29 June 2015 в 14:24
Просто чтобы сказать, что я в конце концов решил это с помощью index ().
НИЧЕГО еще не работало.
Итак, для элементов сиблинга это хорошая работа, если вы сначала выбираете общим классом, а затем хотите изменить что-то по-другому для каждого конкретного.
EDIT: для тех, кто не знает (например, меня) index () дает значение индекса для каждого элемента, который соответствует селектору , считая от 0, в зависимости от их порядка в DOM. Пока вы знаете, сколько элементов есть с классом = «foo», вам не нужен идентификатор.
Очевидно, что это не всегда поможет, но кто-то может найти его полезным.
Вы также можете проверить, используется ли этот элемент id:
if(typeof $(.div).attr('id') == undefined){
//element has no id
} else {
//element has id selector
}
Я использую этот метод для глобальных данныхTables и конкретных упорядоченных данныхTables
Проверьте, существует ли идентификатор элемента
if ($('#id').attr('id') == 'id')
{
//OK
}
is()
. Должен быть селектор.hasId()
только потому, что он действительно кажется очевидным партнером.hasClass()
действительно ... – Matt Fletcher 13 December 2013 в 17:04