如何使用html ID';显示/隐藏动态元素;s和jQuery


How to show/hide dynamic elements using html ID's and jQuery

我在这里问了一个类似的问题,我想得到一个单独的div来显示/隐藏,而不是所有的div。这个问题解决了,我使用了提供的一个答案。然而,在接下来的过程中,我遇到了一些问题,它会打开错误的对应div,有人建议我使用ID来打开正确的对应div。div和它们的ID是动态生成的,它们是按预期匹配的。

我的问题是jQuery脚本不再工作了(我使用上一个问题中其他答案的建议重写了它)——有人知道问题是什么吗?

这是代码(jsFiddle)

快速查看javascript控制台(F12)显示以下错误消息:

 Uncaught ReferenceError: $index is not defined

出现此错误是因为您试图在定义的范围之外(在单击处理程序中)使用变量$index

这是一个工作修改版本,有以下改动:

  • 在事件处理程序中,使用this.id就足以获得元素的ID,因为事件处理程序的this是DOMElement,而不是jquery对象

  • 使用.replacement()或.substring()获取id的最后两位数字。charAt()只在指定位置返回1个字符

  • jquery中的ID选择器是#<id>->"#slidingDiv" + idx

  • 只在jquery变量前面加$,而不是常规变量。这只是一个约定,但当您看到$myvariable时,您会期望它是一个jquery对象


演示

$(document).ready(function() {
    $(".slidingDiv").hide();
    $(".show_hide").show();
    $(".show_hide").click(function() {
        var id = this.id;
        var idx = id.replace('show_hide', '');
        //var idx = id.substring(id.length-2);
        var divName = "#slidingDiv" + idx;
        $(divName).slideToggle();
    });
});

有三件事-你把内部函数的闭包}放错了地方,你应该使用.substring()来获取链接ID的最后两个字符,当你查找相应的元素时,你使用的是css className选择器,而不是ID选择器。

http://jsfiddle.net/uvLfc/

也就是说,更好的方法是将ID的数字部分存储在链路上的数据属性中,或者甚至可能存储目标DIV的实际ID,例如

<a href="#" class="show_hide" data-targetdiv="slidingDiv99"> +/-</a>
...
<div id="slidingDiv99">...</div>

<script>
$(".show_hide").click(function(){
    $('#' + $(this).attr('data-targetdiv')).slideToggle();
});
</script>

其中一个选择器出现错误,我还修改了逻辑以获得slidingDiv的索引。

$(document).ready(function() {
    $(".slidingDiv").hide();
    $(".show_hide").show();
    $(".show_hide").click(function(){
        var $str = $(this).attr("id");
        var $index = $str.replace('show_hide', '');

        var divName = "#slidingDiv" + $index;
        $(divName).slideToggle();
    });
});

工作演示

您的代码中有一个类型-o。将关闭})置于点击事件之外:

$(document).ready(function() {
    $(".slidingDiv").hide();
    $(".show_hide").show();
    $(".show_hide").click(function(){
        var $str = $(this).attr("id");
        var $index = $str.charAt( $str.length-2 );
        var divName = ".slidingDiv" + $index;
        $(divName).slideToggle();
    });
});

您正在寻找方法on(),然后可以使用该方法将事件处理程序绑定到动态生成的对象。它很容易使用。文档可在此处找到。