2015-02-10 79 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/