Javascript 如何将一个元素展开()多次?

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

有没有一种方法可以多次使用Jquery的
.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());