如何在jquery中用另一个标签替换HTML标签?

时间:2013-04-29 18:35:03

标签: jquery html html5 tags

我有一个我正在研究的网站,它使用'旁边'标签,即使使用HTML5 Shiv,无论我尝试什么,我都无法读取IE8。所以,我想知道,你如何用jQuery用其他标签替换现有标签?

例如,如果我想改变

<aside>
  <h3></h3>
</aside>

<div>
  <h3></h3>
</div>

怎么做?

5 个答案:

答案 0 :(得分:28)

试试这个:

$('aside').contents().unwrap().wrap('<div/>');
  • 首先获取aside的内容。
  • 现在unwrap内容。
  • 现在只需wrap新标记内的内容,此处为div

DEMO


此外,您可以使用.replaceWith()方法执行此操作,例如:

$('aside').replaceWith(function () {
    return $('<div/>', {
        html: $(this).html()
    });
});

DEMO

答案 1 :(得分:6)

$('aside').replaceWith('<div><h3></h3></div>');

答案 2 :(得分:3)

这适用于文档中的每个元素,并保留内容。如果div元素的内容中有换行符,则使用换行会导致出现许多aside个元素。

$('aside').each(function() { $(this).replaceWith("<div>"+$(this).html()+"</div>") });

答案 3 :(得分:1)

这将完成这项工作:

 $('aside').replaceWith( "<div>" + $('aside').html() + "</div>" );

同样使用.html()可以提供更加动态的方法。

答案 4 :(得分:1)

这是一个替代HTML5块标记的解决方案,保留了替换HTML5标记的div的样式。简单地替换标签会留下属性。

$('article, aside, figcaption, figure, footer, header, nav, section, source')
    .each(function(){
        var el = $(this),
            html = el.html(),
            attrs = {
                "id": el.attr('id'),
                "classes": el.attr('class'),
                "styles": el.attr('style')
            };

        console.log('Replacing ' + el.prop('tagName') + ', classes: ' + attrs.classes);
        el.replaceWith($('<div></div>').html(html).attr(attrs));
    });

(可能需要对源标记做更多的工作,其中包含&#34; src&#34;和&#34;类型&#34;属性)