2015-02-10 8 views
-1

У меня есть страница с несколькими div, сгенерированными динамически через PHP/MySQL. Имена классов div также генерируются динамически.Как я могу динамически генерировать селектор jQuery?

<div class="1er45">Test 1</div> 

<div class="25dd58">Test 2</div> 

<div class="87f77">Test 3</div> 

<div class="87fffas">Test 4</div> 

<div class="1er45">Test 1</div> 

<div class="25dd58">Test 2</div> 

<div class="87fffas">Test 4</div> 

<div class="8asdf">Test 5</div> 

<div class="25dd58">Test 2</div> 

<div class="87fffas">Test 4</div> 

<div>...</div> 

Как изменить этот селектор jQuery для соответствия всем динамически сгенерированным именам классов div выше? Я хочу показать только первый div, если есть несколько div с тем же именем класса.

<script> 
    $('.classname').not(':first').hide(); 
</script> 
+2

Вам нужно будет получить ссылку на все дивы в вопросе, чтобы начать с ... Есть ли способ, чтобы добавить статический класс к каждому DIV? Или есть родительский элемент, чтобы найти все div внутри? – Ted

+0

Рассмотрение селектора jquery - это не что иное, как строка, да, конечно, вы можете динамически создать селектор jquery. однако вы должны знать детали, чтобы сгенерировать их заранее. Хотя, вероятно, это проблема x/y, генерация динамического селектора jquery, вероятно, неправильный способ решить эту проблему. –

ответ

0

Из того, что я понимаю, вероятно, вам нужно перебрать все div «с и скрыть все те же имена классов вхождений терка чем 1:

$('div[class]').each(function() { 
    $('div.' + $(this).attr('class').replace(/\s/g, '.') + ':gt(0)').hide(); 
}); 

jsFiddle

+0

Отлично, спасибо! – stulk

0

Я действительно не вижу точка динамического генерирования класса.

Если вы знаете образец этих «идентификаторов», вы можете поймать их с помощью регулярного выражения.

0

Предполагая, что вы только когда-либо будет иметь одно значение класса в каждой из этих <div>-х, вы могли получения идеальной, что вы просите в следующем коде:

var $firstDiv = $("div:first"); 
var sFirstClass = $firstDiv.attr("class"); 

if ($("." + sFirstClass).length < 2) { 
    $firstDiv.hide(); 
} 

, что код будет:

  1. Получить первый div
  2. Получите это class значение атрибута
  3. проверяет, если более чем один элемент с таким значением class
  4. скрывает первый элемент, если не
0

Итерации по каждому DIV, считая вхождения каждого имени класса. Затем для каждого имени собранного класса скрывайте повторы.

var classNames = {}; 
$('div').each(function(){ 
    var c = $(this).attr('class'); 
    classNames[c] ? classNames[c]++ : classNames[c] = 1; 
}); 

for (var c in classNames) { 
    if (classNames[c] > 1) 
     $('div.' + c).not(':first').hide(); 
} 

http://jsfiddle.net/ne770a5g/

Смежные вопросы