2010-10-21 4 views
2

У меня есть блог WP с несколькими DIV, сгенерированными через петли PHP. Я хотел бы иметь возможность показать дополнительную информацию о DIV, когда кто-то нажимает на нее.jQuery Get Selector Value Help

код выглядит следующим образом:

<div class="story item-1"> 
<div class="story item-2"> 
<div class="story item-3"> 
<div class="story item-4"> 

(и т.д. Может быть любое число из них.)

При нажатии на один из пунктов выше, следует сделать одно из следующих действий появится:

<div class="data preview-1"> 
<div class="data preview-2"> 
<div class="data preview-3"> 
<div class="data preview-4"> 

Я делаю следующее:

$('.story').click(function() { 
    var getNum = jQuery(this).attr('class'); 
    alert('hi ' + getNum); 
}); 

Но как извлечь значение «число» (1,2,3,4 и т. Д.) Элемента, который я просто нажал на переменную? Если я могу получить это в переменной, такой как «num», тогда я могу легко использовать jQuery .hide и .show для выполнения действий. То, что я до сих пор получает всю ценность класса. Просто нужно число из второго класса.

Буду признателен за любую помощь! Благодаря!

ответ

3

I'd .split() на дефис, and .pop() последний элемент (число) от результирующего массива. Затем .show() соответствующий предварительный просмотр.

$('.story').click(function() { 
    var getNum = this.className.split('-').pop(); 
    $('.data.preview-' + getNum).show(); 
}); 
+1

Хорошее использование '.pop()'. +1 – RPM1984

+0

Первый раз, задавая вопрос о переполнении стека, не ожидал такого проклятого быстрого ответа! Спасибо, Патрик! –

+0

@Sahas - Добро пожаловать.Я думаю, вы обнаружите, что ответы здесь будут, как правило, очень быстрыми, по крайней мере, в лагере jQuery. : o) – user113716

0
$('.story').click(function() { 
    var index = /item-(\d)/.exec($(this).attr('class'))[1] - 1; 
    $('.data').hide().eq(index).show(); 
}); 
2

Конечно, вы могли использовать строку манипуляции вытащить идентификатор, но я предлагаю лучшее решение:

На DOMReady, цикл через все DIV-х, и назначить индекс для элементов с использованием легкий механизм хранения данных Jquery, в .data():

Отказ от ответственности: непроверенных

$(document).ready(function() { 
    $('div.story').each(function(index) { 
     $.data(this, "num", index); 
    }); 
}); 

Тогда вы можете вытащить его в ваш клик:

$('.story').click(function() { 
    var getNum = $.data(this, "num"); 
    alert('hi ' + getNum); 
}); 

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

+1

Всегда полезно видеть творческое использование 'индекса'' .each() '(а также версию быстрого доступа' $ .data() '). Хотя, если вы собираетесь использовать маршрут хранения данных, в этом случае я мог бы склониться к '$ .data()' и воспользоваться тем, что '.each()' создает закрытие. Если вы просто назначаете обработчики кликов внутри '.each()', вы можете напрямую ссылаться на постоянный 'index'. +1: o) – user113716

+0

Да, вы правы. Прекрасный пример отношений любви/ненависти, которые мы имеем с закрытием. :) Кроме того, я просто думаю, что «.data» uber круто. :) – RPM1984

+1

А, посмотри на меня, это наоборот. Я сдулся закрытием, но горячий/холодный, используя '.data()'. Забавно, как это. : o) – user113716