2011-09-17 23 views
0

我有一个HTML文档6周的div具有以下特点:定位独特,第一重复成员

<div id="m1_1" title="Sept. 05, 2011" class="eheader">MR 1 &#151;</div> 
<div id="m1_8" title="Sept. 05, 2011" class="eheader">MR 8 &#151;</div> 
<div id="m1_12" title="Sept. 05, 2011" class="eheader">MR 12 &#151;</div> 
<div id="m1_16" title="Sept. 12, 2011" class="eheader">MR 16 &#151;</div> 
<div id="m1_17" title="Sept. 12, 2011" class="eheader">MR 17 &#151;</div> 
<div id="m1_19" title="Sept. 15, 2011" class="eheader">MR 19 &#151;</div>  

他们的ID是像m1_1,m1_2,m1_3,m1_4,m1_5和m1_6 。下划线后面的数字是动态生成的,所以我不能直接指定......“m1_8”。

它们都共享同一个班级,这对班组来说是独一无二的。在我的CSS中,我将这个类的div的display属性设置为“hidden”或“none”。

它们都有一个标题元素,它被设置为创建日期。

我需要的是一个函数,它将按照类名称循环遍历div,并定位所有唯一标题和任何重复标题的第一个成员。在上面的例子中,m1_19将被定位,因为它的标题(创建日期)对于该集合是唯一的。 divs m1_1和m1_16也将成为攻击目标,因为它们是重复的第一个成员。

我的功能大纲看起来像这样......当然还有大量的逻辑丢失,我甚至不确定我是否正确设置了循环。这可以完成,还是我完全在错误的轨道上?

function checkHeaders(){ 
    var hdrSet = document.getElementsByClassName("eheader"); 

    for (var i=0; i<hdrSet.length; i++){ 
     if (hdrSet[i].title { 
      hdrSet[i].style.display = "block"; 
     } 
    } 

} 

回答

1
function checkHeaders(){ 
    var hdrSet = document.getElementsByClassName("eheader"); 
    var titles = {}; 

    for (var i=0; i<hdrSet.length; i++){ 
     if (!titles[ hdrSet[i].title ]) { 
      titles[ hdrSet[i].title ] = true; 
      hdrSet[i].style.display = "block"; 
     } 
    } 
} 
+0

哇,你们快。让我们通读这些建议,看看有什么作用。谢谢! – kjarsenal

+0

在这里演示:[http://jsfiddle.net/2GdYJ/](http://jsfiddle.net/2GdYJ/) – Will

+0

太棒了。谢谢! – kjarsenal

0
function checkHeaders(){ 
    var hdrSet = document.getElementsByClassName("eheader"); 
    var prevTitle = ''; 
    for (var i=0; i<hdrSet.length; i++){ 
     if (hdrSet[i].title) { 
      if ($prevTitle != hdrSet[i].title) { 
       hdrSet[i].style.display = "block"; 
      } 
      $prevTitle = hdrSet[i].title; 
     } 
    } 
} 
1

我想这是你所追求的:

function checkHeaders(){ 
    var hdrSet = document.getElementsByClassName("eheader"); 
    var title; 

    for(var i=0; i<hdrSet.length; i++){ 
     if(title != hdrSet[i].title){ 
      title = hdrSet[i].title; 
      hdrSet[i].style.display = 'block'; 
     } 
    } 
} 

checkHeaders(); 

例子:http://jsfiddle.net/Vk7Ud/

说明

var hdrSet = document.getElementsByClassName("eheader"); 
//grab all the divs 

var title; 
//set a variable to contain the titles 

for(var i=0; i<hdrSet.length; i++){ 
//for each div 

    if(title != hdrSet[i].title){ 
    //if the title does not match the one that is set, continue 
    //(first one is always fine, as nothing is set) 

     title = hdrSet[i].title; 
     //then set the latest title to title 

     hdrSet[i].style.display = 'block'; 
     //display the div 
     } 
    } 
} 

checkHeaders(); 
+0

感谢您的解释。非常有教育意义。 – kjarsenal

+0

很高兴帮助@kjarsenal! –

+0

请注意,如果div按标题分组,则此功能才有效。如果他们没有分组,这将显示重复。 – Will