你能操纵jQuery中生成的HTML吗?

时间:2014-07-21 21:37:12

标签: jquery javascript-events event-handling

简单地说,当点击一个按钮时,我正在使用jQuery加载div。但是这个div是另一个按钮。加载的按钮,我似乎无法用jQuery操纵/选择它。这是一个最好地展示我正在尝试的例子:

http://codepen.io/projodesign/pen/zlvaB

这是jQuery: -

$(document).ready(function(){
  $('.button').click(function(){
    $(this).after('<div class="added-element">IM THE ADDED DIV</div><div class="remove-added-element">REMOVE DIV</div>')
  });

  $('.remove-added-element').click(function(){
    $('.added-element').hide();
  });
});

我的jQuery知识非常基础,所以任何以更好的方式解决这个问题的指针都会很棒。显然我可以将它放在HTML中,但我希望有更多可用的div添加。希望这一切都有意义。

2 个答案:

答案 0 :(得分:1)

执行顺序问题。您将事件处理程序添加到.remove-added-element之前。

如果您将该处理程序移到.button点击处理程序中,那么您的问题就会消失。

$('.button').click(function(){
    $(this).after('<div class="added-element">IM THE ADDED DIV</div><div class="remove-added-element">REMOVE DIV</div>');
    $('.remove-added-element').click(function(){
        $('.added-element').hide();
    });
});

修改

nzifnab的解决方案更好。你可以改变我上面给出的代码来规避他提出的问题,但是为什么你会这么简单的话呢?

DOUBLE EDIT

由于您在下面说您想要遵循此解决方案,您需要按照某些步骤来避免nzifnab引发的问题。我认为改变和调整他的建议会做你想做的事情:

$('.button').click(function(){
    $(this).after('<div class="added-element">IM THE ADDED DIV</div><div class="remove-added-element">REMOVE DIV</div>');
    $(this).find('.remove-added-element').click(function(){
        $(this).closest('.added-element').hide();
    });
});

答案 1 :(得分:1)

jsfiddle:http://jsfiddle.net/zW7zA/

您需要使用事件委派。试试on方法:

$(document).ready(function(){
  $('.button').on('click', function(){
    $(this).after('<div class="added-element">IM THE ADDED DIV<div class="remove-added-element">REMOVE DIV</div></div>')
  });

  $(document).on('click', '.remove-added-element', function(){
    $(this).closest('.added-element').hide();
  });
});

这是有效的原因而你的原因并不是因为当你直接绑定到.remove-added-element时,当脚本运行时 ,所以没有事件受到约束。使用这种新的委托形式,它将事件绑定到确实存在的document,然后在点击事物时检查它们是否与给定的选择器匹配。

我不得不修改一些对你当前剧本不起作用的事情。

您的&#39;删除&#39;代码只是$('.added-element').hide()即将删除所有新元素,即使您多次点击该链接也是如此。此新代码仅隐藏单击删除按钮的一个部分(closest查看与选择器匹配的最近父级。)

我不是在原始事件处理程序中绑定事件的忠实粉丝,因为如果您多次单击该按钮,您将绑定许多事件 - 并且使用给定代码中的一些事件将&#34;加倍&#34; (如果你点击按钮10次,9个事件到第二个,8个事件到第三个等等,你将最终将10个事件绑定到第一个新元素,除非你修改它。

这种方式更容易,它只会绑定一个事件。