【问题标题】:Hiding elements in jQuery inside a table在表格中隐藏jQuery中的元素
【发布时间】:2012-02-12 05:56:50
【问题描述】:

我有一张带有trtd 的桌子。我的td 有一个div 作为它的孩子。一个divid="question",另一个有id="answer"。我希望在遍历我的td 时隐藏具有id="answer"div。当页面加载时,才会出现问题div。这是html的结构

<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 应该隐藏,但这不是真正的输出。

【问题讨论】:

  • 哦,打错了,对不起
  • 不要使用 ID。正如我所见,这种结构可以重复。 ID 是整个文档的唯一标识符。而是使用类名。

标签: javascript jquery html-table jquery-selectors


【解决方案1】:

如果您有不止一行,则不应使用多个 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();

为了直接回答您的问题,无论如何,在您的 TD 元素集合中,您被称为 .hide() 函数。

您可以将.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

【讨论】:

  • @davidethell Eirinn 谢谢。我想问,这里选择class而不是id的唯一原因是,那个id应该是唯一的吗?是的,你是对的,这种结构是重复的。在这种情况下,所有 td 都有 id=question 和 id=answer。让所有 tds 具有相同的类名而不是相同的 id 也可以吗?谢谢
  • @Basit:是的,不同的元素使用相同的类名是完全正常的。这也使得 CSS 中的样式更加容易。保持 ID 值唯一是非常好的做法。即使使用相同的 ID 看起来一切正常,也很有可能以后的某些东西不能正常工作;)
【解决方案2】:

使用选择器。

给所有答案框一个“答案”类

并使用:

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

这将隐藏所有答案类。要向他们显示问题 ID 和答案类别:

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

不幸的是,我不太精通表格,但我希望答案有一些价值。

已编辑以反映 cmets。

【讨论】:

  • 你的第二个选择器,使用#Q1,会这样吗?
  • 它应该可以工作 :) 如果不是,它们可能需要交换。它在#Q1 中查找 .answer。这种方法确实要求每个问题都有自己的 ID...#Q1、#Q2 等等。
  • 是的,我明白了你想要做什么,我只是认为你必须把父母放在第一位,然后孩子放在第二位......我可能错了,我以前从未尝试过......
  • ...需要反过来:$("#Q1 .answer").show();
  • 是的,对不起,先父母后孩子:)
【解决方案3】:

最好让元素 ID 在您的文档中保持唯一。这不是绝对必需的,但它会使您的元素更容易使用。在您的情况下,我会将您所有的问题和答案 id 属性更改为类。然后你可以这样做来隐藏你所有的答案:

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

【讨论】:

  • 嗯,如果给我的 div 类属性,比如div class="question",那么我该如何检查这个属性。就像我在做if ($div.id) 一样,我不能做if ($div.class)。 ?谢谢
  • $div 是一个 JQuery 元素,因此您可以这样做... $div.attr('class')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多