[英]Dynamic flag adding DOM elements with jquery
我想添加一个按钮,当用户点击一个span
为hierchical树ul
HTML元素。
这是一个例子:
<ul class="tree">
<li>
<span class="li_cat">Food</span>
<ul class="tree">
<li>
<span class="li_cat">Fruit</span>
<ul class="tree">
<li>
<span class="li_cat">Red</span>
<ul class="tree">
<li><span class="li_cat">Cherry</span></li>
</ul>
</li>
<li>
<span class="li_cat">Yellow</span>
<ul class="tree">
<li><span class="li_cat">Banana</span></li>
</ul>
</li>
</ul>
</li>
<li>
<span class="li_cat">Meat</span>
<ul class="tree">
<li><span class="li_cat">Beef</span></li>
<li><span class="li_cat">Pork</span></li>
</ul>
</li>
</ul>
</li>
</ul>
jQuery代码是这样的:
$(document).on('click', '.li_cat', function(e){
e.stopPropagation();
$(this).html($(this).html()+" <button class='btn btn-warning btn-xs'><i class='glyphicon glyphicon-pencil'></i></button>");
});
我只想显示一次按钮,但是每次单击添加一个新按钮时,如何解决此问题?
在附加到document
click
事件中设置namespace
,以引用特定于.li_cat
元素的click
事件。 检查元素.attr("data-keyname")
如果元素没有一个.attr("data-keyname")
设置一个Boolean
的元素标志.attr("data-keyname")
使用.html(function)
。 如果所有.li_cat
元素都将.attr("data-keyname")
设置为true
则删除document
委派click
事件。
$(document).on('click.cat', '.li_cat', function(e) { e.stopPropagation(); if ($(this).attr("data-clicked") === undefined) { $(this).attr("data-clicked", true).html(function(_, html) { return html + "<button class='btn btn-warning btn-xs'><i class='glyphicon glyphicon-pencil'>button</i></button>" }); // if all `.li_cat` elements have `data-clicked` attribute if ($(".li_cat[data-clicked]").length === $(".li_cat").length) { // remove `click` event listener for `.li_cat` elements $(document).off("click.cat") } } });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul class="tree"> <li> <span class="li_cat">Food</span> <ul class="tree"> <li> <span class="li_cat">Fruit</span> <ul class="tree"> <li> <span class="li_cat">Red</span> <ul class="tree"> <li><span class="li_cat">Cherry</span> </li> </ul> </li> <li> <span class="li_cat">Yellow</span> <ul class="tree"> <li><span class="li_cat">Banana</span> </li> </ul> </li> </ul> </li> <li> <span class="li_cat">Meat</span> <ul class="tree"> <li><span class="li_cat">Beef</span> </li> <li><span class="li_cat">Pork</span> </li> </ul> </li> </ul> </li> </ul>
首先empty
您的span
,然后添加button
,你想要的button
只有一次。 同样,这将确保所有以前添加的button
都将与events
一起被删除。
$(document).on('click', '.li_cat', function(e){
e.stopPropagation();
var spanText = $(this).text();
$(this).empty();
$(this).append(spanText);
$(this).append("<button class='btn btn-warning btn-xs'><i class='glyphicon glyphicon-pencil'></i></button>");
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.