【问题标题】:jquery clone function width a addClass nestedjquery克隆函数宽度一个addClass嵌套
【发布时间】:2012-04-13 22:44:21
【问题描述】:

当 div 被克隆时,我无法选择我的选项。

克隆后,我希望能够选择选项并提供选定的类。所以每个克隆的 div 都有一个选择的选项。

请查看我的演示并尝试克隆。

http://jsfiddle.net/XeELs/60/

jQuery

var cloneCount = 0;
$("#add-address").click(function() {

    $("#to-add-address").clone()
        .attr("id", "to-add-address_Clone" + cloneCount)
        .insertAfter("#to-add-address");
    $("#clone", "#to-add-address_Clone" + cloneCount)
        .attr("id", "clone_Clone" + cloneCount);
    cloneCount++;

    $('.options li a').bind('click',function () {
            $('.options li a').removeClass('selected');
            $(this).addClass('selected');
        });

});

HTML

<ul>    
    <li id="to-add-address" class="outerDiv address" >
        <div id="clone">
            <label><input type="text" value="Address"><span class="input-edit"></span></label>
            <label><input type="text" value="Address 2"><span class="input-edit"></span></label>
            <label><input type="text" value="Town"><span class="input-edit"></span></label>
            <label><input type="text" value="Contry"><span class="input-edit"></span></label>
            <label><input type="text" value="Post Code"><span class="input-edit"></span></label>

            <ul class="options">
                <li class="home"><a href="javascript:void(0);">home</a></li>
                <li class="work"><a href="javascript:void(0);">work</a></li>
                <li class="other"><a href="javascript:void(0);">other</a></li>
                <li class="delete"><a href="javascript:void(0);">delete</a></li>
            </ul>
        </div>
    </li>
</ul>


<a href="javascript:void(0);" id="add-address">clone</a>

【问题讨论】:

    标签: jquery clone


    【解决方案1】:

    您可以将其更改为仅影响该克隆中的元素:

    $(this).closest(".options").find('li a').removeClass('selected');
    

    此外,您每次都重新绑定单击,导致每个元素上的侦听器数量随着每次克隆而增加,而不是使用事件委托:

        $(document).on("click", '.options li a',function () {
            var $this = $(this);
            $this.closest(".options").find('li a').removeClass('selected');
            $this.addClass('selected');
        });
    

    如果您的真实代码有一个共同的父级,请将document 替换为适当的选择器。

    http://jsfiddle.net/XeELs/61/

    【讨论】:

    • 您可以再次使用closest 查找具有给定选择器的最近祖先。也许$(this).closest(".outerDiv").remove().
    • jsfiddle.net/XeELs/69 在这个小提琴上,“删除”正在删除所有 div,我无法再克隆了。有什么想法吗?
    • 因为您将其设置为在单击任何链接时运行,而不仅仅是删除链接。而且您的克隆取决于第一个存在,如果您删除它,克隆将不再起作用。
    • jsfiddle.net/XeELs/73 感谢您的建议,现在正在工作,但我怎样才能只保留一个 div?
    猜你喜欢
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    相关资源
    最近更新 更多