jQuery, выберите (любой all *) элемент на Click - PullRequest
0 голосов
/ 08 сентября 2011

Я создаю инструмент для отладки для себя. Я хочу, чтобы он размещал класс на любом элементе, когда бы он ни щелкнул.

Примерно так:

$('*').click(function(){$(this).toggleClass('debug')});

Это на самом деле работает, за исключением того, что переключает «отладку» для ВСЕХ элементов.

Например:

<body>
<div id='3'>
    <div id='2'>
        <div id='1'></div>
    </div>
</div>
</body>

Если я нажму <div id="1">, он добавит класс с именем "debug" в <div id="2"> и <div id="3">.

То, что происходит, когда вы нажимаете <div id="1>, это считается кликом для всех 3, потому что технически все дивы были нажаты. Поэтому я подумал о том, чтобы иметь массив, содержащий все элементы HTML.

Пока у меня есть:

window.v = [];
$('*').click(function(){window.v.push(this)});

После этого это:

$(window.v[0]).toggleClass('debug');

К сожалению, когда это:

$(window.v[window.v.length]).toggleClass('debug');

... или вышеописанное выполняется, ничего не делает. Иногда он помещает класс «debug» в тег body.

Итак, я не совсем уверен, является ли использование массива лучшим маршрутом для этого. У кого-нибудь еще есть идеи о том, как универсально щелкнуть по любому элементу и разместить на нем класс отладки?

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 08 сентября 2011

Сделайте это:

$( window ).click(function ( e ) {
    $( e.target ).toggleClass( 'debug' );
});

Привязка обработчиков кликов к всем элементам DOM - плохая идея. Вместо этого привязайте один обработчик одного клика к объекту window. Вы можете сделать это, потому что события клика всплывают (дерево DOM). Чтобы определить, какой элемент был нажат, используйте e.target.

Просто так :)

Демонстрационная версия: http://jsfiddle.net/Ucpzq/1/

1 голос
/ 08 сентября 2011

Отменить пузырь:

$('*').click(function(evt) {
    $(this).toggleClass('debug');
    evt.stopPropagation();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...