[英]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.