2012-01-17 78 views
0

我有一个表trtd。我的td有一个div作为它的孩子。其中一个divid="question",另一个有id="answer"。我想在遍历我的td时,divid="answer"被隐藏。当页面加载时,只会出现问题div。这里是html的结构jQuery中的隐藏元素表

<td style="display: none;"> 
    <div style="border-color: #000000;position: relative;float: right;margin-top: 2px;right: 12%;"> </div> 
    <div style="border-color: #000000;position: relative;float: right;margin-top: 2px;right:-2%;"> </div> 
    <div id="question"> 
     <img id="faqGrid:0:j_idt77" height="10" width="480" src="/TDAP/faces/javax.faces.resource/spacer/dot_clear.gif?ln=primefaces&amp;v=2.2.RC2"> 
     <br> 
     <br> 
    <div id="answer"> 
    <div class="horizontalline"></div> 
</td> 

我做了以下工作。但它隐藏了整个td。

$('#faqGrid tr td').each(function(){ 

    var $cells = $(); 

    /** 
    *Gives you all children as an object array 
    * 0: div 
    * 1: div 
    * 2: div#question 
    * 3: img#faqGrid:0:j_idt77 /TDAP/fa...=2.2.RC2 
    * 4: br 
    * 5: br 
    * 6: div#answer 
    * 7: div.horizontalline 
    */ 
    var tdChildrenArray = $(this).children(); 

    var divChildrenArray = $(this).children('div'); 

    var elementStack; 

    $.each(divChildrenArray, function(index, value){ 

     var $div = value; 

     if ($div.id) { 

      var $divId = $div.id; 

      if ($divId == 'answer') { 

       var colNum = $(this).cellIndex; 
       $cells = $cells.add($div); 

      } //end of if ($divId == 'answer') 

     } //end of if ($div.id) 

    }); //end of $.each(object, fn) 

    return $(this).pushStack($cells); 

}).hide(); //end of $('#faqGrid tr td').each(fn) 

我在这里的想法是,在div的是推栈上只应该隐藏,但是这不是真正的输出。

+0

哦,那是错误的,对不起 – Basit 2012-01-17 12:21:27

+0

不要使用ID。因为我看到这种结构可以重复。 ID是整个文档的唯一标识符。而是使用类名。 – footy 2012-01-17 12:22:56

回答

5

如果您有多个行,您不应该使用多个ID属性。更改为类,而不是...

<div class="question"> 
    <img id="faqGrid:0:j_idt77" height="10" width="480" src="/TDAP/faces/javax.faces.resource/spacer/dot_clear.gif?ln=primefaces&amp;v=2.2.RC2"> 
    <br> 
    <br> 
<div class="answer"> 

然后你就可以做到这一点简单的jQuery隐藏答案元素...

$(".answer").hide(); 

要回答你直接的问题,你被称为.hide()功能上无论如何,你的TD元素的集合。

你可以从最末端移动.hide(),并把在这条线......

if ($divId == 'answer') { 

    $div.hide();//hide your answer element 
    var colNum = $(this).cellIndex; 
    $cells = $cells.add($div); 

} //end of if ($divId == 'answer') 

...但这是办法不多代码,这么简单的东西

编辑A Sample of what you might be trying to do

+0

@davidethell Eirinn谢谢。我想问问,在这里选择类而不是id的唯一原因是,该id应该是唯一的?是的,你是对的,这个结构是重复的。在这种情况下,所有td的id = question,id = answer。所有的tds都有相同的类名而不是相同的id也很好吗?谢谢 – Basit 2012-01-17 13:43:52

+0

@Basit:是的,不同的元素使用相同的类名是完全正常的。这使得CSS中的样式也更容易。保持ID值唯一是非常好的做法。即使事情看起来可以用同一个ID也行,那么以后的某些事情很可能不会正常工作;) – musefan 2012-01-17 14:05:23

+0

好的谢谢:)。非常感谢:) – Basit 2012-01-18 04:39:21

2

使用选择器。

给所有的答案盒一类的“答案”

和使用:

$(".answer").hide(); 

这将隐藏所有他们的答案类。给他们打电话问题ID和答案类别:

$("#Q1 .answer").show(); 

我不是很熟悉表,但我希望答案有一定的价值。

编辑以反映评论。

+0

你的第二个选择器,带有“#Q1”,能够这样工作吗? – musefan 2012-01-17 12:31:01

+0

它应该工作是:)如果它不,他们可能不得不交换。它在#Q1中寻找.answer。这种方法确实需要每个问题都有自己的ID ...#Q1,#Q2等等。 – Eirinn 2012-01-17 12:36:36

+0

是的,我得到了你想要做的,我只是认为你必须把父母放在第一位,孩子第二...我可能是错的,我从来没有尝试过... – musefan 2012-01-17 12:37:52

1

元素ID在文档中是唯一的。这不是绝对必要的,但它会使你更容易处理你的元素。在你的情况下,我会改变你的所有问题,并将id属性改为类。然后你可以这样做来隐藏你的答案:

$('#faqGrid tr td div.answer').hide(); 
+0

嗯,如果给我的div class属性,像'div class =“question”',那么我如何检查这个属性。就像我在做'if($ div.id)',我不能做'if($ div.class)'。 ?谢谢 – Basit 2012-01-17 12:33:40

+1

'$ div'是一个JQuery元素,因此你可以做...'$ div.attr('class')' – musefan 2012-01-17 12:43:40