代码之家  ›  专栏  ›  技术社区  ›  Kyle Cureau

更改标记,但保留属性和内容-jQuery/Javascript

  •  7
  • Kyle Cureau  · 技术社区  · 14 年前
    <a href="page.html" class="class1 class2" id="thisid">Text</a>
    

    更改为

    <p href="page.html" class="class1 class2" id="thisid">Text</p>
    

    replaceWith 但据我所知,这并不能保留属性/内容。

    注:为什么p会有一个 href p 回到 a 在另一个事件上。

    6 回复  |  直到 4 年前
        1
  •  -1
  •   Moin Zaman    14 年前

    试试这个:

    var $a = $('a#thisid');
    var ahref = $a.attr('href');
    var aclass = $a.attr('class');
    var aid = $a.attr('id');
    var atext = $a.text();
    $a.replaceWith('<p href="'+ ahref +'" class="'+ aclass +'" id="'+ aid+'">'+ atext +'</p>');
    
        2
  •  19
  •   softcr    14 年前

    下面是一个更通用的方法:

    // New type of the tag
    var replacementTag = 'p';
    
    // Replace all a tags with the type of replacementTag
    $('a').each(function() {
        var outer = this.outerHTML;
    
        // Replace opening tag
        var regex = new RegExp('<' + this.tagName, 'i');
        var newTag = outer.replace(regex, '<' + replacementTag);
    
        // Replace closing tag
        regex = new RegExp('</' + this.tagName, 'i');
        newTag = newTag.replace(regex, '</' + replacementTag);
    
        $(this).replaceWith(newTag);
    });
    

    您可以在此处尝试代码: http://jsfiddle.net/tTAJM/

        3
  •  9
  •   Seth McCauley    9 年前

    下面是我用来替换jquery中html标记的方法:

    // Iterate over each element and replace the tag while maintaining attributes
    $('a').each(function() {
    
      // Create a new element and assign it attributes from the current element
      var NewElement = $("<p />");
      $.each(this.attributes, function(i, attrib){
        $(NewElement).attr(attrib.name, attrib.value);
      });
    
      // Replace the current element with the new one and carry over the contents
      $(this).replaceWith(function () {
        return $(NewElement).append($(this).contents());
      });
    
    });
    

    我通常也会将其限制为特定的类,例如 $('a.class1').each(function()

        4
  •  8
  •   Ilia Ross    8 年前

    (function (a) {
        a.fn.replaceTagName = function (f) {
            var g = [],
                h = this.length;
            while (h--) {
                var k = document.createElement(f),
                    b = this[h],
                    d = b.attributes;
                for (var c = d.length - 1; c >= 0; c--) {
                    var j = d[c];
                    k.setAttribute(j.name, j.value)
                }
                k.innerHTML = b.innerHTML;
                a(b).after(k).remove();
                g[h - 1] = k
            }
            return a(g)
        }
    })(window.jQuery);
    

    用法:

    // Replace given object tag's name
    $('a').replaceTagName("p");
    

    例子: JSFiddle

        5
  •  2
  •   Reigel Gallarde    14 年前

    有本事的人

    var p = $('a').wrapAll('<div class="replace"></div>');
    
    var a = $('div').map(function(){
        return this.innerHTML;
    }).get().join(' ');
    
    
    $('div.replace').html(a.replace(/<a/g,'<p').replace(/a>/g,'p>'));
    

    demo

        6
  •  0
  •   WIPocket    8 年前

    我把它变成了一个简单的javascript函数:

    function ReplaceTags(Original, Replace){
         var oarr = document.getElementsByTagName(Original);
         for(i=0; oarr.length < i; i++){
    var html = oarr[i].outerHTML;
    oarr[i].outerHTML = (html.replace(Original, Replace));
         }
    }
    

    如果只想替换特定的标记,只需删除for循环:

    function ReplaceTag(Original, Replace, customi){ 
    // If customi = 0 the first appearance will get replaced
    var i = customi;
        if(i == undefined)
         i=0;
    var oarr = document.getElementsByTagName(Original);
    var html = oarr[i].outerHTML;
    oarr[i].outerHTML = (html.replace(Original, Replace));
    
    }