Сопоставление динамически добавляемых событий (как атрибутов) с jQuery - PullRequest
1 голос
/ 09 октября 2010

Как я могу сопоставить все элементы, которые имеют определенный атрибут, который добавляется во время выполнения?

Например, код:

$('[onkeydown]')

будет успешно соответствовать:

<div onkeydown="foo();">

, но не соответствует следующему div:

<div id="mydiv">
// ....
<script type="text/javascript">
var element = document.getElementById('mydiv');
element.onkeydown = foo;
</script>

Примечание: атрибут ID используется в качестве примера. Я не знаю значений атрибутов идентификатора всех элементов, которые я хочу сопоставить, поэтому, пожалуйста, предоставьте решение, которое соответствует всем элементам, для которых указан атрибут.

Для пояснения, во втором примере следующий код правильно возвращает используемую функцию:

$('#mydiv').attr('onkeydown') // == foo

Примечание: если я делаю то же самое выше, но вместо использования события (onkeydown) я использую другой атрибут, который не является событием (например, title), он будет успешно соответствовать динамически добавлен атрибутов. Таким образом, кажется, что это только проблема с событиями.

1 Ответ

2 голосов
/ 09 октября 2010

[ Рабочая демонстрация ]

/**
* Returns all the elements with the specified attribute.
* @param base is optional (root element)
*/
function getElementsByAttr( attr, base ) {
  base = base || document;
  var all = base.getElementsByTagName('*'),
      len = all.length,
      res = [];
  for ( var i = 0; i < len; i++ )
    if ( all[i][attr] != null )
      res.push( all[i] )
  return res;
}

Обратите внимание, что функция проверяет все элементы в DOM (если корневой элемент не задан)поэтому он может стать медленным при использовании на тяжелых макетах.

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