Проверка javascript, если существует элемент DOM
Как лучше проверить, существует ли элемент DOM в javascript?
Следует ли проверять, существует ли элемент до его использования, например?
if ($("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "").size() != 0) {
var row = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");
}
не будет ли это выполнять packageId.removeSpecialChars().toUpperCase()
дважды?
ИЛИ это будет лучшим вариантом?
var row = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");
if (row)
{
// do something
}
Однако, не выбрасывал бы исключение, если не нашел?
Ответы
Ответ 1
Когда вы на самом деле работаете с элементами DOM, тогда да, вы должны убедиться, что он существует, прежде чем пытаться работать с ним, чтобы избежать ошибок JavaScript. Однако вы работаете не с элементами DOM, вы работаете с объектом jQuery, который (потенциально) содержит элементы DOM.
Функции jQuery уже обрабатывают случаи, когда в наборе элементов нет совпадений, поэтому вам не нужно явно проверять, есть ли элементы, прежде чем пытаться работать с ними. Вам нужно будет сделать это только в том случае, если вы пытаетесь напрямую ссылаться на элементы DOM внутри этого набора, используя функцию .get()
или обозначение квадратной скобки [index]
.
В стороне, функция .size()
jQuery устарела в версии 1.8, вы должны напрямую использовать свойство jQuery object length
, чтобы проверить, есть ли элементы, поэтому:
var $object = $('a-selector');
if($object.length) {
// there at least one matching element
}
Ответ 2
Общие правила программирования говорят, что не повторяйте себя. Итак, в этом случае вы могли бы, по крайней мере, сделать вывод об этом только один раз и сохранить переменную ссылку:
var thing = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");
Затем поиск выбора не происходит дважды, удаленные вызовы метода удаляются и т.д. Это также позволяет вам писать более понятный код, если вы можете назвать переменную чем-то значимым, кроме thing
, или eeek!, a
(хотя не обязательно, чтобы код был более значимым, люди все еще используют такие имена, как a
!)
if (thing != null) { }
if (thing.size() != 0) {
}
etc.
Что касается вызовов методов несколько раз, что часто неизбежно.
Ответ 3
Лучше кэшировать его:
var machId = $("#" + machineId + packageId.removeSpecialChars().toUpperCase());
if (machId.size() != 0) {
var row = machId;
}
Ответ 4
Он делает, что вам нужно:
var a = $("#" + machineId + packageId.removeSpecialChars().toUpperCase() + "");
if (a.size()) {
var row = a;
}
Ответ 5
Вам в основном нужно выяснить, существует ли элемент DOM в вашем HTML, но пиво в виду, что jQuery не бросает фатальную ошибку, если элемент не существует в вашей DOM, но будет хорошей проверкой, он добавляет еще один защищенный слой на вашем коде, было что-то названное .size(), которое устарело от версии 1.8, поэтому не рекомендуется использовать даже вы используете старую версию jQuery, поэтому лучшим решением на данный момент будет что-то вроде кода ниже:/p >
if($('.class').length) { // check if any element with this class exist, if not exist, it return 0 and can not pass the if estatement
// do something
}