2014-09-02 3 views
1

В каждом событии jQuery jQuery предоставляет currentTarget, который совпадает с this, но насколько я понимаю, свойства currentTarget зависят от вашего браузера.jQuery event currentTarget dataset

В chrome я могу получить event.currentTarget.dataset, который дает мне данные от элемента, который начал это событие, но я не думаю, что это работает во всех браузерах. Единственное кросс-браузерное решение, которое я знаю, - это получить данные, обернув currentTarget в другом объекте jQuery, как показано ниже.

var div = jQuery("<div/>").data("numbers", [1,2,3]); 
div.click(function(e) { 
    var data = jQuery(e.currentTarget).data(); 
    console.log(data.numbers); 
}); 

Кто-нибудь знает перекрестное решение браузера, чтобы получить данные, не создавая новый объект JQuery с this/currentTarget?

Update: Просто чтобы быть ясно, и поэтому я спрашиваю:

Мы преобразовывают элемент, который вызвал событие в объект JQuery снова, послав его через JQuery второй раз (это было уже JQuery объект для создания события). Я надеюсь на способ переноса уже созданного объекта jQuery в событие. Слайды 44 & 45 на this presentation объясняют мой мыслительный процесс.

Вы можете сделать это с помощью event.currentTarget.dataset, но я не думаю, что это кросс-браузерное решение. В приведенном выше коде вы можете использовать объект кеширования jQuery div для получения данных без повторного создания объекта jQuery. Это работает для этого конкретного примера, но что бы вы сделали с динамическим событием, как delegate события ниже:

jQuery("#container").on('click', '.pop-data', function(e) { 
    var data = jQuery(e.currentTarget).data(); 
    alert(data); 
}); 

кодом, приведенных выше работ и не является плохим решением, но кто-нибудь знает способ получить данные без создавая новый объект jQuery?

+0

Почему вы хотите другое решение? –

+0

В чем проблема с тем, как jQuery был написан для использования? –

+0

@arun Производительность. Его для плагина. – Dol

ответ

0

Посмотрите вниз на принятый ответ на

Having problems in IE8 when attempting to get data from target event

jQuery("#container").on('click', '.pop-data', function(e) { 
    console.log($(e.target).attr('data-numbers')); 
}); 

Лично я не мог получить .data() JQuery материал для работы (не знаю, почему), но вышеупомянутые работы с слипания атрибут HTML в строке.

<img src='...' data-numbers='1'> 
+0

Спасибо за вклад. К сожалению, я использую данные jQuery несколько иначе, я не привязываю его к атрибутам данных, я прикрепляю его в скрипте, используя метод данных jQuery, чтобы установить его. Ответ, который я ищу, - это как получить доступ к данным из переменной события (e), переносимой в событии, а не снова обернуть ее в функцию jQuery. Он доступен, но через свойство данных, называемое набором данных в currentTarget, которое я не уверен, переносится в каждом браузере. – Dol

+0

Вы можете получить свои данные, вызывая данные без «данных» и конвертируя остальные в нижний регистр верблюда. Но в вашем случае лучше использовать getAttribute на target или currentTarget (без jQuery). Я думаю, что этот метод восходит к IE 5. – Dol