繁体   English   中英

使用jQuery在祖先和后代之间插入元素

[英]Insert element between ancestor and descendant using jQuery

我想转换

<div id="outer">
  <div id="inner"></div>
</div>

<div id="outer">
  <div id="middle">
    <div id="inner"></div>
  </div>
</div>

我想保留对在此之前已设置的div的任何引用,因此只需执行$(“#outer”)。html($(“” + $(“#outer”)。html()+“” ))对我不起作用。 有没有比创建中间div更好的方法,那就是将外部的所有子代移到中间div,然后将其附加到外部div?

使用.wrap() ...

$('#inner').wrap('<div id="middle"></div>');

演示: http : //jsfiddle.net/ENmDF/


您应该注意,尽管jQuery看起来像您正在使用HTML,因为它接受了像'<div id="middle"></div>'这样的字符串来创建元素,但事实是,它需要您的字符串,使用它来创建DOM元素,然后将其插入DOM,并将其以及包装的部分放置在各自的位置。

DOM API中将与此类似...

var inner = document.getElementById('inner');
var middle = document.createElement('div');
middle.id = 'middle';

inner.parentNode.insertBefore(middle, inner);

middle.appendChild(inner);

演示: http : //jsfiddle.net/ENmDF/1/


jQuery具有用于创建具有属性的元素的另一种语法。 那就是将一个对象作为第二个参数传递给$函数,因此原始代码可以这样写...

$('#inner').wrap($('<div>', {id:"middle"}));

演示: http : //jsfiddle.net/ENmDF/3/

$("#inner")
    .wrap(
        $("<div>")
            .prop("id", "middle")
    );

它的工作方式与我的回答不是相同,但此方法使用DOM来创建将其包装的div元素。

请注意,设置id属性后,缺少分号( ; )。

演示

另外,如果您喜欢它,这里有一条线:

$("#inner").wrap($("<div>").attr("id","middle"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM