Ответ 1
Проверьте часто задаваемые вопросы jQuery...
Вы можете использовать свойство length коллекции jQuery, возвращаемое вашим селектором:
if ( $('#myDiv').length ){}
Я использую jQuery, и я хочу проверить наличие элемента на моей странице. Я написал следующий код, но он не работает:
if($("#btext" + i) != null) {
//alert($("#btext" + i).text());
$("#btext" + i).text("Branch " + i);
}
Как проверить существование элемента?
Проверьте часто задаваемые вопросы jQuery...
Вы можете использовать свойство length коллекции jQuery, возвращаемое вашим селектором:
if ( $('#myDiv').length ){}
(Так как у меня нет достаточной репутации, чтобы проголосовать за ответ...)
Волк написал:
Свойство длины вызова на undefinedили нулевой объект вызовет IE и веб-браузеры не работают!
Вместо этого попробуйте следующее:
// NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram if($("#something") !== null){ // do something }
или
// NOTE!! THE FOLLOWING IS WRONG; DO NOT USE! -- EleotleCram if($("#something") === null){ // don't do something }
Хотя верно, что вызов свойства length на undefined или нулевом объекте приведет к сбою браузеров, результат селекторов jQuery ($ ('...')) никогда не будет равен null или undefined, Таким образом, предложения кода не имеют смысла. Используйте один из других ответов, они имеют больше смысла.
(Обновление 2012). Поскольку люди смотрят на код, и этот ответ довольно высок в списке: последние пару лет я использовал этот небольшой плагин:
jQuery.fn['any'] = function() {
return (this.length > 0);
};
Я думаю, что $('div'). any() читает лучше, чем $('div'). length, плюс вы не будете страдать так сильно от typs: $('div'). ayn() даст ошибку времени выполнения $('div'). lenght будет, скорее всего, всегда ложным. p >
__
Edits november 2012:
1) Поскольку люди склонны смотреть на код и не читать то, что сказано вокруг кода, я добавил две большие примечания лектора к цитируемому коду Вольфа.
2) Я добавил код небольшого плагина, который я использую для этой ситуации.
Функция поиска возвращает массив соответствующих элементов. Вы можете проверить, равна ли длина. Обратите внимание на изменение, чтобы только разыскивать элементы один раз и повторно использовать результаты по мере необходимости.
var elem = $("#btext" + i);
if (elem.length != 0) {
elem.text("Branch " + i);
}
Кроме того, попробовали ли вы просто использовать текстовую функцию - если элемент не существует, он ничего не сделает.
$("#btext" + i).text("Branch " + i);
Функция jquery $() всегда возвращает ненулевое значение - средние элементы соответствуют вам selector cretaria. Если элемент не был найден, он вернет пустой массив. Таким образом, ваш код будет выглядеть примерно так:
if ($("#btext" + i).length){
//alert($("#btext" + i).text());
$("#btext" + i).text("Branch " + i);
}
независимо от того, что вы выбираете, функция $()
всегда возвращает объект jQuery, поэтому его нельзя использовать для тестирования. Лучший способ (если не единственный) - использовать функцию size()
или свойство собственной длины, как описано выше.
if ( $('selector').size() ) {...}
В jQuery 1.4 вы получаете функцию $.isEmptyObject, но если вы вынуждены использовать более старую версию jQ, как мы, бедные разработчики Drupal просто воруют, используйте этот код:
// This is a function similar to the jQuery 1.4 $.isEmptyObject.
function isObjectEmpty(obj) {
for ( var name in obj ) {
return false;
}
return true;
}
Используйте его как:
console.log(isObjectEmpty(the_object)); // Returns true or false.
if ( $('#whatever')[0] ) {...}
Объект jQuery, возвращаемый всеми собственными методами jQuery, НЕ является массивом, это объект со многими свойствами; один из которых является "длиной". Вы также можете проверить размер() или get (0) или get() - 'get (0)' работает так же, как и доступ к первому элементу, т.е. $(Elem) [0]
используйте $("#selector").get(0)
для проверки с нулевым значением. get возвращает элемент dom, до тех пор вы переходите к массиву, где вам нужно проверить свойство length. Мне лично не нравится проверка длины для нулевой обработки, она меня смущает по какой-то причине:)
Используя свойство length, вы можете сделать это.
jQuery.fn.exists = function(){return ($(this).length < 0);}
if ($(selector).exists()) {
//do somthing
}
Как насчет использования "undefined"?
if (value != undefined){ // do stuff }
когда объект пуст, верните эту ошибку:
Uncaught TypeError: Не удается прочитать свойство '0' из null
Я пробую этот код try{
if ($("#btext" + i).length) {};
}
catch(err){
if ($("#btext" + i).length) {
//working this code if item not NULL
};
}
if (typeof($("#btext" + i)) == 'object'){
$("#btext" + i).text("Branch " + i);
}
Свойство длины вызова в undefined или нулевом объекте приведет к сбою браузеров IE и webkit!
Вместо этого попробуйте следующее:
if($("#something") !== null){
// do something
}
или
if($("#something") === null){
// don't do something
}