日期:2014-05-16  浏览次数:20395 次

jquery 删除节点的问题
<ul>
<li>1</li>
<li title="a">2</li>
<li>3</li>
<li>4</li>
 </ul>

$("ul li:eq(1)").remove( ); // 删除了第2个,正常

$("ul li").remove("ul li:eq(1)"); // 结果只剩下第4个li 为毛啊这步

$("ul li").remove("ul li[title='a']"); // 删除了第2个,正常

这是为何?





------解决方案--------------------
你对remove()的参数的理解有问题吧,这样写是不规范的,remove()可以接受一个选择器表达式参数,起到一个过滤对象集合的作用。
$("ul li"),此时匹配的是li元素的集合,对这个集合使用remove()方法:
$("ul li").remove("ul li:eq(1)");,这样其实是找不到作为ul子元素的li元素的,至于想弄明白为什么只剩下最后一个li,要看remove()方法的实现代码了,应该说,你提供的这个参数是预料外的,执行变得不可预期也就不奇怪了。

这样的需求,正确的写法是:
JScript code
$("ul li").remove("ul li:eq(1)"); //错误
$("ul li:eq(1)").remove(); //正确
//或者
$("ul li").eq(1).remove();
//或者
$("ul").find("li:eq(1)").remove();
//或者
$("ul").find("li").eq(1).remove();