Как я должен проверить DOM страницы при присоединении событий jQuery / javascript к элементам? - PullRequest
0 голосов
/ 21 июля 2010

Я использую jQuery для добавления событий в элементы DOM. Когда я делаю это, я часто использую селекторы, которые технически могут собрать список совпадающих элементов, а не только один. например используя методы .children() и .find(), я мог найти 0, 1 или много подходящих элементов DOM.

Нужно ли просто проверять .size() == 1 на каждом элементе, когда я прикрепляю события, или есть более простой способ сделать это, например, селектор со столбцом ожидаемых совпадений, который завершается ошибкой, если это ожидаемое число не равно размеру?

Кажется, это глупо, учитывая, что я также выводил HTML и должен знать правильный ответ, но у меня много манипуляций с DOM, и мне было интересно, есть ли встроенный механизм проверки работоспособности или нет. *

Ответы [ 5 ]

1 голос
/ 22 июля 2010

Вы могли бы написать простой метод расширения, чтобы делать то, что вы хотите, например:

jQuery.fn.ifCount = function(count) {
  return this.length === count ? this : $();
};

Затем в вашем коде вместо if каждый раз, вы можете просто вызвать это в цепочке,например:

$("div").ifCount(2).css({ color: 'red' });

Если счет равен 2, то набор продолжается и .css() запускается на элементах.Если число не равно 2, возвращается новый пустой набор, поэтому .css() не работает ни на чем.


Если вы хотите просто привязать любое количество элементови не заботится о том, сколько, не нужно ничего проверять, вы можете просто сделать:

$("div").click(function() { .... });

Это работает, если есть 0, 1 или 400 <div> элементов, это не имеет значения,Поведение jQuery по умолчанию состоит в том, чтобы просто продолжить цепочку с соответствующими элементами ... если в цепочке 0, то функции просто выполняются без элементов, но не выдает ошибку .Это также не относится к обработчикам событий, оно работает с любым кодом jQuery (и плагинами, которые написаны правильно).

0 голосов
/ 21 июля 2010

В основном вы можете применять функции сразу: $ ( "...") коснуться ();.

Вы также можете попробовать: $ ("..."). each (function () { $ (Это) .something (); });

0 голосов
/ 21 июля 2010

Вы можете поместить выборку в локальную переменную и затем проверить размер:

var items = $(".items");

if (items.length == 1) {
    // Do you regular stuff here
} else if (items.length > 1) {
    // Log error to the console
    // Example: console.log('Too Many Items!!'); <- with firebug ofcourse
} else {
    // console.log("Too Few Items");
}

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

console.log('Too Many Items!!');
items = items.first();
0 голосов
/ 21 июля 2010

Я думаю, вы должны разработать селектор, чтобы соответствовать вашим потребностям.Если цель выбрать один элемент - использовать идентификатор селектора или те, которые возвращают один элемент или ноль $ ("#"). Нажмите (function_callback), если вам нужно больше - используйте другие селекторы.http://api.jquery.com/category/events/

В любом случае, когда вы присоединяете события в формате jQuery $ (""). Click (или другое событие), вы объявляете, что все элементы, соответствующие условию селектора, подписаны на событие.

0 голосов
/ 21 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...