使用javascript更改标记

use*_*625 21 html javascript

我想知道如何用这样的纯javascript更改标签

    <span>some text</span>
Run Code Online (Sandbox Code Playgroud)

我想改变它

  <div>some text</div>
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做.

Guf*_*ffa 49

您无法更改此类元素的类型,而是必须创建新元素并将内容移动到其中.例:

var e = document.getElementsByTagName('span')[0];

var d = document.createElement('div');
d.innerHTML = e.innerHTML;

e.parentNode.replaceChild(d, e);
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/Guffa/bhnWR/

  • @Guffa:`e.parentNode.replaceChild(d,e);`但是+1 ;-) (4认同)
  • 我意识到原来的问题并没有要求这个,但这并不需要任何属性。换句话说,如果原始 HTML 是“&lt;span class="foo"&gt;bar&lt;/span&gt;”,它仍然会生成结果 HTML“&lt;div&gt;bar&lt;/div&gt;”。 (2认同)

Jur*_*yan 6

刚刚为此编写了一个 jQuery 插件。

(function( $ ) {
  $.fn.replaceTag = function(newTag) {
    var originalElement = this[0]
    , originalTag = originalElement.tagName
    , startRX = new RegExp('^<'+originalTag, 'i')
    , endRX = new RegExp(originalTag+'>$', 'i')
    , startSubst = '<'+newTag
    , endSubst = newTag+'>'
    , newHTML = originalElement.outerHTML
    .replace(startRX, startSubst)
    .replace(endRX, endSubst);
    this.replaceWith(newHTML);
  };
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

用法:

$('div#toChange').replaceTag('span')
Run Code Online (Sandbox Code Playgroud)

这种方法最大的优点是id保留了原元素的所有属性。

  • 他明确要求“纯 JavaScript”答案。 (13认同)

Jay*_*zzi -3

如果使用jquery

 Var spantxt = $('span').text();
 $('body').append('<div>'+spantext+'</div');
Run Code Online (Sandbox Code Playgroud)

请注意,这只适用于只有一个跨度的情况,否则请使用 id 选择器