为jQuery指定元素

时间:2012-11-13 10:57:03

标签: javascript jquery

我有<ul><h2>标题,每个标题下面都有文字。我希望能够通过单击每个标题来显示或隐藏下面的文本。

如何在单击标题时仅告诉jquery显示同一<li>内的文本而不为每个<li>创建单独的if语句?

<ul>
    <li>
        <h2>heading</h2>
        <div id='step'>
            text text text
        </div>
    </li>
    <li>
        <h2>heading</h2>
        <div id='step'>
            text text text
        </div>
    </li>
</ul>

<script>
    $("li").click(function () {
        if ($("#step").is(":hidden")) {
            $("#step").slideDown("slow");
        } else {
            $("#step").slideUp("slow");
        }
    });
</script>

3 个答案:

答案 0 :(得分:2)

首先,您有重复的ID,这是不正确的。将它们替换为类或其他标识符,因为ID应该是唯一的。

其次使用$(this)来引用被点击的元素。

HTML

<ul>
 <li>
  <h2>heading</h2>
  <div class='step'>
   text text text
  </div>
 </li>
 <li>
  <h2>heading</h2>
  <div class='step'>
   text text text
  </div>
 </li>
</ul>

的JavaScript

$("li").click(function () {
    $(this).children('.step').slideToggle('slow');
});​

JSFiddle:http://jsfiddle.net/JGZRN/

答案 1 :(得分:0)

这应该这样做:) $(this)引用已被点击的列表元素,然后它“找到”它下面的p标签和“slideToggle”,它们根据当前状态向上或向下滑动

<script>
    $(function(){
        $('li').click(function(){
            $(this).find('p').slideToggle();
        });
    });
</script>
<ul>
    <li>
        <h2>heading 1</h2>
        <p>Text text text</p>
    </li>
    <li>
        <h2>heading 2</h2>
        <p>Text text text</p>
    </li>
 </ul>

答案 2 :(得分:0)

如果您在div中更改了id="step" class="step",则可以使用以下代码:

$("li").click(function () {
     var div = $(this).find(".step");
     if (div.is(":hidden")) {
       div.slideDown("slow");
     } 
     else {
       div.slideUp("slow");
     }
});