【问题标题】:Jquery Show/Hide Toggle NextJquery 显示/隐藏切换下一步
【发布时间】:2012-04-17 02:28:29
【问题描述】:

我在页面上有多个产品都通过数据库拉入。 在每个下面我都有一个评论框,我想通过点击评论按钮来显示和隐藏。

我的 Javascript:

$(document).ready(function(){

    $("#product-box div#product-comment-box").hide();
    //$("#product-box div.comment").show();

$("#product-box div.comment").click(function(){
    $("li div#product-comment-box").toggle();
}); 

我的产品区域 HTML:

<li><div id="product-box">
    <div id="product-image"><a href="#"><img src="images/image_2.jpg"></a></div>
    <div id="product-controls">
        <a href="#"><div id="button" class="more"><p>More</p></div></a>
        <a href="#"><div id="button" class="add"><p>Add</p></div></a>
        <div id="button" class="comment"><p>Comment</p></div>
        <a href="#"><div id="button" class="like"><p>Like</p></div></a>
    </div>
    <p>Product Name</p>
    <div id="product-comment-box">Comment</div>
    </div></li>

但这是设法切换每个产品上的所有评论框,我如何最好地将它们分开?我尝试使用 next 和 nextAll,但没有成功。

谢谢

【问题讨论】:

    标签: jquery toggle show-hide


    【解决方案1】:

    您必须使用this 来引用当前评论。记住选择器在做什么,获取 DOM 中匹配的所有内容。

    $("#product-box div.comment").click(function(){
        $(this).closest('li').find('div#product-comment-box').toggle();
    }); 
    

    虽然按 id 选择似乎不是一个好主意。尝试给那个 div 一个类,然后选择它。

    //Change
    <div id="product-comment-box">Comment</div>
    
    //To
    <div class="product-comment-box">Comment</div>  
    
    //then select using class instead.
    $("#product-box div.comment").click(function(){
        $(this).closest('li').find('div.product-comment-box').toggle();
    }); 
    

    【讨论】:

    • 如何从那里选择“#product-comment-box”?干杯
    • 使用$('selector', this)可以限制范围。试试我编辑的答案。没有你的 html 我只是猜测。我无法从您的选择器中推断出您的 html 结构。
    • 我按照你上面提到的方法试过了,但是没有运气,不能操作。我在上面添加了我的 HTML 区域。谢谢大家
    • 感谢 html,让它更清晰。更新了我的答案。
    【解决方案2】:

    你也可以尝试这种方式...传递 id 像

                  <div id="comment<?php echo "Your db id" ?>" class="show_to_public">
    
                  </div>
                  <div id="product-comment-box<?php echo "Your db id" ?>">
    
                  </div>
    

    这样您就可以在您的 jquery 中将其分隔为..

          $('.show_to_public').click(function(e){   
            var id=$(this).attr("id").replace("comment","");
            $('#product-comment-box'+id).toggle();
          });
    

    【讨论】:

    • 这是我在循环中检索数据时通常使用的方式。希望这对您有帮助。
    【解决方案3】:

    在点击处理程序中,this 关键字指的是您点击的元素。

    来自docs

    handler 参数采用回调函数,如上所示。在处理程序中,关键字 this 指代处理程序绑定到的 DOM 元素。要使用 jQuery 中的元素,可以将其传递给普通的 $() 函数。例如:

    $('#foo').bind('click', function() {
      alert($(this).text());
    });
    

    您需要利用该元素来找到您要查找的元素。在你的例子中,这样的事情会起作用:

    $(this).closest('li').find('.product-comment-box')
    

    ...几乎。请注意,我使用了一个名为“product-comment-box”的类而不是 ID。这是因为 ID 仅用于唯一元素,并且永远不应该用于多个元素。因此,您还需要将所有重复的 ID 替换为类。只需将 'id' 替换为 'class' 应该可以在您使用的 sn-p 中使用,但按钮除外,因为它们已经有一个类。对于那些,你可以用空格分隔类:

    <div class="button like">...
    

    【讨论】:

    • 刚刚注意到我或多或少地重复了 mrtsherman 的回答...这里是否有有用的信息值得保留,还是我应该删除我的回答?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多