我有一个页面,其中包含多个通过PHP/MMySQL动态生成的div。div类名也是动态生成的。
<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>
据我所知,您可能需要迭代所有的div
,并隐藏所有出现在1:以上的相同类名
$( 'div[class]' ).each( function() {
$( 'div.' + $( this ).attr( 'class' ).replace( /'s/g, '.' ) + ':gt(0)' ).hide();
});
jsFiddle
我真的不认为动态生成类有什么意义。
如果你知道这些"id"的模式,你可以用正则表达式捕捉它们。
假设每个<div>
中只有一个类值,那么您可以在以下代码中实现您所要求的:
var $firstDiv = $("div:first");
var sFirstClass = $firstDiv.attr("class");
if ($("." + sFirstClass).length < 2) {
$firstDiv.hide();
}
该代码将:
- 检索第一个
div
- 获取它的
class
属性值 - 检查是否有多个元素具有该
class
值 - 如果没有,则隐藏第一个元素
遍历每个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/