2012-03-11 4 views
0

Следующий код выполняет .css({"background":"black"}); на всех элементах с class="hole", однако я пытаюсь заставить его сделать это на элементах с class="hole" AND data-hole-key="[hole_key_variable]".jQuery selector madness

Что не хватает?

JQuery:

// on elements with class "hole" hovered 
$('.hole').hover(
    function(){ 
     // get the data value of the currently hovered element 
     var holeKey = $($(this).data('holeKey')); 
     // on all elements with that class "hole" and specified data value, change bgcolor 
     $('.hole').data(holeKey).css({"background":"black"}); 
    }, 
    function(){ 
     var holeKey = $($(this).data('holeKey')); 
     $('.hole').data(holeKey).removeAttr('style'); 
    } 
); 

HTML:

<td class="hole" data-hole-key="1">text</td> 
<td class="hole" data-hole-key="2">text</td> 
<td class="hole" data-hole-key="3">text</td> 

Кстати, почему это (неисправный) код не работает вообще без двойной обертки этой линии:

var holeKey = $($(this).data('holeKey')); 
+1

Вы пробовали совмещая селекторы, например, '$ ('. hole [data-hole-key]');'? – rjz

ответ

0

Вот рабочий jsfiddle о том, что я считаю, что вы ищете: http://jsfiddle.net/XKs4a/

// on elements with class "hole" hovered 
$('.hole').hover(
    function(){ 
     // get the data value of the currently hovered element 
     var holeKey = $(this).data('holeKey'); 
     // on all elements with that class "hole" and specified data value, change bgcolor 
     $('.hole[data-hole-key=' + holeKey + ']').css({"background":"black"}); 
    }, 
    function(){ 
     var holeKey = $(this).data('holeKey'); 
     $('.hole[data-hole-key=' + holeKey + ']').removeAttr('style'); 
    } 
); 

И для этого:

var holeKey = $($(this).data('holeKey')); 

Это будет возвращать ключ, обернутый в JQuery, так что для первого элемента, вы получите $ (1)

+0

Спасибо, это работает! Я не знал о выборе квадратной скобки. Заглядывая в него, нужно многому научиться :) – sumsaricum

0

EDIT Переосмысливая то, что, я думаю, вы пытаетесь сделать, это первый отрезала изменит парил элемент CSS только

$('.hole').hover(
    function(){ 

    $(this).css({"background":"black"}); 
    }, 
    function(){ 

     $(this).removeAttr('style'); 
    } 
); 

, где ваш код вызывает проблемы

Эта часть здесь не собирается возвращать значение, потому что вы обернув его в JQuery, и значение будучи обернута не селектор

// get the data value of the currently hovered element 
    var holeKey = $($(this).data('holeKey')); 

Для того, чтобы получить значение из данных элементов

// get the data value of the currently hovered element 
    var holeKey = $(this).data('holeKey'); 

Чтобы выделить $ ('отверстие.) На основе его значения данных, вы могли бы сделать что-то вроде этого:

var testVal=1; 

    $('.hole[data-hole-key="'+ testVal+'"]').hover(..... 

Или другой метод с использованием фильтра()

var testVal=1; 

    $('.hole').filter(function(){ 
      return $(this).data('data-hole-key')==testVal;     
    }).hover(.... 
+0

Спасибо за ваш ответ. Первый фрагмент кода был не совсем тем, что я искал, но я узнал несколько трюков из следующих частей :) – sumsaricum

+0

описание было сложно выполнить на основе нерабочего кода в качестве ссылки. Ответ выбран на самом деле в значительной степени вокруг использования мое отредактированное решение использования «this» и добавляет дополнительный DOM-поиск к нему – charlietfl