JS动态增加删除UL节点LI

本文介绍如何使用JavaScript动态地增加和删除HTML中的UL节点和LI元素,包括通过选择器添加新项并限制列表长度,以及从列表中移除项目。

JS如何动态增加删除UL节点LI及相关内容

<ul id="ul"> 

<li id=1>11111111111111111<a href="javascript:del(1);">del</a></li> 
<li id=2 >22222222222222222<a href="javascript:del(2);">del</a></li> 
<li id=3>33333333333333333<a href="javascript:del(3);">del</a></li> 
<li id=4>44444444444444444<a href="javascript:del(4);">del</a></li> 
<li id=5>55555555555555555<a href="javascript:del(5);">del</a></li> 

</ul> 
<select name="car_type" id="car_type" onchange="add_car(this);" > 
<option value="">please select</option> 
<option value="car_11">11111</option> 
<option value="car_22">22222</option> 
<option value="car_33">33333</option> 
<option value="car_44">44444</option> 
</select > 
<input type="text" id="ul_value" onclick="getulvalue();" name="ul_value" value=""> 
<script> 

function $$(id){ 
var obj=document.getElementById(id); 
return obj; 
} 

function del(n) { 
$$('ul').removeChild($$(n)); 
} 

function add(id,txt) { 
var ul=$$('ul'); 
var li= document.createElement("li"); 
var href_a = document.createElement("a"); 
href_a.href="javascript:del('"+id+"');"; 
href_a.innerHTML ="del"; 
li.innerHTML=txt; 
li.id=id; 
li.appendChild(href_a); 
ul.appendChild(li); 
} www.jbxue.com

function add_car(obj){ 
//chk ul childNodes length 
if($$('ul').childNodes.length<3){ 
var flag=true; 
var ul_obj=$$('ul').childNodes; 
var car_id=obj.options[obj.selectedIndex].value; 
var txt=obj.options[obj.selectedIndex].text; 
if(car_id!=null&&car_id!=""){ 

for(var i=0;i<ul_obj.length;i++){ 

if(ul_obj[i].id==car_id){ 
alert("已经添加!"); 
flag=false; 
} 
} 

if(flag){ 
add(car_id,txt); 
} 
} 

}else{ 
alert("只允许加入三个值!"); 
return; 
} 
} 

function getulvalue(){ 
if($$('ul').childNodes.length==0){ 
alert("请选择相关内容!"); 
return; 
}else{ 
var txt=""; 
for(var i=0;i<$$('ul').childNodes.length;i++){ 
txt+=$$('ul').childNodes[i].id+","; 
} 
$$("ul_value").value=txt; 
} 

} 
</script> 

转载于:https://www.cnblogs.com/cfinder010/p/3744881.html

<think>好的,我现在需要帮助用户解决如何通过JavaScript或jQuery动态删除ul下的所有li标签的问题。首先,我应该回顾用户提供的引用内容,看看是否有相关的信息可以参考。 用户提供的引用中,引用[1]提到用jQuery的append方法动态添加li标签,使用的是$('#ulPlayPist').append("...")。引用[2]则讨论了如何删除最后一个li元素,使用了find('li:last')和remove()方法。引用[3]展示了如何获取所有的li标签数组,并通过each循环处理每个li。这些信息可能对解决问题有帮助。 用户当前的需求是删除ul下的所有li标签,而不仅仅是最后一个。我需要考虑两种方法:纯JavaScript和jQuery,因为用户提到可以使用这两种技术。 首先,对于jQuery方法,用户之前的引用中已经有用到选择器和remove()方法。根据引用[2],删除最后一个li使用的是find('li:last').remove(),那如果要删除所有li,可能只需要选择所有的li并调用remove()。比如,$('ul li').remove(),或者更精确地通过父元素ul的ID来选择,如$('#ulID').empty()。empty()方法会移除所有子元素,这可能更高效,因为不需要逐个删除,而是清空整个ul的内容。 然后,纯JavaScript的方法,可能需要获取ul元素,然后循环删除其子节点,或者直接设置innerHTML为空。例如,document.getElementById('ulID').innerHTML = ''; 或者使用removeChild循环删除每个子节点。不过,innerHTML方法更简洁,但需要注意浏览器兼容性,不过现代浏览器应该都支持。 另外,用户可能关心性能问题。使用jQuery的empty()方法通常比逐个删除更高效,因为它直接操作DOM,而不需要遍历每个元素。而innerHTML = ''同样高效,因为浏览器会一次性处理。 还需要考虑是否有事件监听器绑定在li元素上。如果使用innerHTML或empty(),这些方法会移除元素及其关联的事件处理程序,避免内存泄漏。而如果使用remove()方法,jQuery会自动处理事件解绑,所以这也是一个优点。 用户可能希望代码简洁,所以推荐使用jQuery的empty()方法,或者直接选择所有li并remove()。同时,也要提供纯JavaScript的实现,以满足不使用jQuery的情况。 需要确保用户正确选择到目标ul,比如通过ID或其他选择器。例如,如果ul有ID为myList,jQuery的选择器应该是$('#myList').empty(),而JavaScript则是document.getElementById('myList').innerHTML = '';。 总结可能的解决方案: 1. jQuery方法: a. 使用empty()清空ul:$('#ulID').empty(); b. 选择所有li删除:$('#ulID li').remove(); 2. 纯JavaScript方法: a. 设置innerHTML为空:document.getElementById('ulID').innerHTML = ''; b. 循环删除节点:while循环移除第一个子节点直到清空。 需要比较这些方法的优缺点,并给出建议。例如,empty()和innerHTML方法更高效,推荐使用。同时,提醒用户替换正确的选择器ID,确保代码能正确找到目标ul。 最后,生成相关问题,可能涉及性能优化、事件处理、其他操作如添加li等,帮助用户进一步学习。</think>### 分步解答 #### 方法一:使用jQuery的`empty()`方法(推荐) ```javascript // 通过ID选择ul并清空所有子元素 $('#yourUlId').empty(); ``` - **原理**:`empty()`方法会移除目标元素的所有子节点(包括事件监听器),性能高效[^2][^3]。 - **注意**:将`yourUlId`替换为实际的ul元素ID。 #### 方法二:使用jQuery的`remove()`方法 ```javascript // 选择所有li元素删除 $('#yourUlId li').remove(); ``` - **适用场景**:需要筛选特定条件的li时(例如带特定class的li)[^2]。 #### 方法三:纯JavaScript清空内容 ```javascript // 直接设置innerHTML为空字符串 document.getElementById('yourUlId').innerHTML = ''; ``` - **优势**:无需依赖第三方库,代码简洁高效[^1]。 #### 方法四:循环删除节点 ```javascript const ul = document.getElementById('yourUlId'); while (ul.firstChild) { ul.removeChild(ul.firstChild); } ``` - **适用场景**:需要逐个操作子节点时(例如记录删除过程)。 --- ### 性能对比 | 方法 | 性能 | 事件监听处理 | 代码简洁度 | |-------------|------|--------------|------------| | jQuery.empty() | 高 | 自动解绑 | ★★★★★ | | innerHTML="" | 最高 | 直接清除 | ★★★★★ | | 循环removeChild| 低 | 需手动处理 | ★★★☆☆ | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值