2015-02-10 80 views
-1

我有一个页面,其中包含通过PHP/MySQL动态生成的多个div。 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 2015-02-10 16:38:13

+0

考虑到jQuery选择器只不过是一个字符串,是的,你当然可以动态地创建一个jQuery选择器。但是,您必须事先知道要生成它的部件。尽管这可能是x/y问题,但生成动态jquery选择器可能是解决此问题的错误方法。 – 2015-02-10 16:42:42

回答

0

从你需要遍历所有div的和隐藏所有同一类的名字我大概明白出现擦菜板比1:

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

jsFiddle

+0

完美,非常感谢! – stulk 2015-02-10 19:08:24

0

我实在不明白有一个类动态生成的要点。

如果你知道这些“ID”的模式,你可以用正则表达式来捕捉它们。

0

假设你永远只能将不得不在每个那些<div>的一类值,你可以acheive你在下面的代码要求的东西:

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

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

该代码将:

  1. 检索第一div
  2. 得到它的class属性值
  3. 检查,看看是否有是与class
  4. 多于一个元件隐藏第一元件,如果没有
0

迭代通过各格,计数每个类名的出现。然后为每个收集的类名称隐藏重复。

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/