Javascript 如何将一个元素展开()多次?
有没有一种方法可以多次使用Jquery的Javascript 如何将一个元素展开()多次?,javascript,jquery,html,Javascript,Jquery,Html,有没有一种方法可以多次使用Jquery的.unwrap(),而无需复制和粘贴?如果它能接受一个参数或类似的东西,那就太好了:.unwrap(4),但它不能。是否有更聪明的解决方案来实现以下目标: $(.foo a”).unwrap().unwrap().unwrap().unwrap() 您可以自己编写: $.fn.unwrapTimes = function(times){ var unwrapCount = times; return
.unwrap()
,而无需复制和粘贴?如果它能接受一个参数或类似的东西,那就太好了:.unwrap(4)
,但它不能。是否有更聪明的解决方案来实现以下目标:
$(.foo a”).unwrap().unwrap().unwrap().unwrap()代码>
-
-
-
-
-
-
您可以自己编写:
$.fn.unwrapTimes = function(times){
var unwrapCount = times;
return this.each(function(){
var $this = $(this);
for(var i=0;i<unwrapCount;i++){
$this.unwrap();
}
});
};
$.fn.unwaptimes=函数(次){
var UnwapCount=次;
返回此值。每个(函数(){
var$this=$(this);
对于(var i=0;i为什么要将其过度复杂化
var $wrapper = $('li.foo'),
$keep = $wrapper.find('a'),
$result = $wrapper.empty().append($keep);
console.log($result[0].outerHTML);
使用
foo的孩子(.foo>*
)
(这将是元素的祖先)
用于包含元素本身
$('.foo a').parentsUntil('.foo > *').addBack().unwrap();
如果您想要一个通用函数,它可以将对象展开n次
,它可以:
$.fn.unwrapN = function(n) {
while(n--) $(this).unwrap();
return $(this);
}
可以使用html()
但这种方法不能扩展到多个实例,但可以对多个实例使用html(fn)
$('.foo').html(function(){
return $(this).find('a')
});
对于单个foo
elememt,请尝试使用
$(.foo a”).prependTo($(.foo”).empty();
-
这是为了一个项目还是出于好奇?如果是前者,并且您觉得必须多次使用“展开”,我建议您可能只是克隆/销毁元素并将其附加到父元素。$(.foo>div”).replacetwith($(.foo a”)
?(var i=0;i无论您使用何种方法,都应该意识到使用多个展开的执行效果不如一次性替换method@ShemSeger请参阅post.Briefest可以减少到,这里。您可以使用times
而不是将其设置为单独的变量函数参数是local的您是否只是快速编写了该代码在几秒钟内就抓到了什么?我希望我是那么聪明…形式变量是局部的。$.fn.unwaptimes=function(n){for(var a=this;n;n--)a=a.unwrap();return a}
不客气。很好。感谢您向我介绍了一个新方法。这应该是公认的答案,请注意,这将打开锚元素的直接父元素,而不是锚元素本身。即您只剩下
如果您有多个.foo列表项,则此项不起作用。@RickHitchcock是您得到的一个棘手的命令。.大量的dom操作…好奇地看到其中一些上的性能测试…许多.foo
上的所有展开都不太可能非常有效.html()
销毁元素。例如,如果您在a
元素上单击事件侦听器,这些元素就会被销毁。这很好。但是它会杀死li.foo a
中的所有“叔叔”,如果有的话。@SalmanA您是指兄弟姐妹吗?在这个上下文中叔叔是什么?:-)是的,兄弟姐妹也是。叔叔是父母的兄弟姐妹。@SalmanA删除所有父母直到。foo
是要求,否?不适用于多个列表项:。@ShemSeger只添加了一个。each()
。可能在OP中包含详细信息,要求js
应用于“多个列表项”还有?再看一看,您已经用最后一个链接的副本替换了所有链接。@ShemSeger;更新了帖子,包含了链接JSFIDLE的js
$('.foo').html(function(){
return $(this).find('a')
});
$(".foo a").prependTo($(".foo").empty());