Get selected element's outer HTML

前端 未结 30 2355
礼貌的吻别
礼貌的吻别 2020-11-21 04:50

I\'m trying to get the HTML of a selected object with jQuery. I am aware of the .html() function; the issue is that I need the HTML including the selected obje

相关标签:
30条回答
  • 2020-11-21 05:22

    2014 Edit : The question and this reply are from 2010. At the time, no better solution was widely available. Now, many of the other replies are better : Eric Hu's, or Re Capcha's for example.

    This site seems to have a solution for you : jQuery: outerHTML | Yelotofu

    jQuery.fn.outerHTML = function(s) {
        return s
            ? this.before(s).remove()
            : jQuery("<p>").append(this.eq(0).clone()).html();
    };
    
    0 讨论(0)
  • 2020-11-21 05:22

    No need to generate a function for it. Just do it like this:

    $('a').each(function(){
        var s = $(this).clone().wrap('<p>').parent().html();
        console.log(s);
    });
    

    (Your browser's console will show what is logged, by the way. Most of the latest browsers since around 2009 have this feature.)

    The magic is this on the end:

    .clone().wrap('<p>').parent().html();
    

    The clone means you're not actually disturbing the DOM. Run it without it and you'll see p tags inserted before/after all hyperlinks (in this example), which is undesirable. So, yes, use .clone().

    The way it works is that it takes each a tag, makes a clone of it in RAM, wraps with p tags, gets the parent of it (meaning the p tag), and then gets the innerHTML property of it.

    EDIT: Took advice and changed div tags to p tags because it's less typing and works the same.

    0 讨论(0)
  • 2020-11-21 05:22

    Anothe similar solution with added remove() of the temporary DOM object.

    0 讨论(0)
  • 2020-11-21 05:23

    This is great for changing elements on the dom but does NOT work for ie when passing in a html string into jquery like this:

    $('<div id="foo">Some <span id="blog">content</span></div>').find('#blog').outerHTML();
    

    After some manipulation I have created a function which allows the above to work in ie for html strings:

    $.fn.htmlStringOuterHTML = function() {     
        this.parent().find(this).wrap('<div/>');        
        return this.parent().html();
    };
    
    0 讨论(0)
  • 2020-11-21 05:24

    What about: prop('outerHTML')?

    var outerHTML_text = $('#item-to-be-selected').prop('outerHTML');
    

    And to set:

    $('#item-to-be-selected').prop('outerHTML', outerHTML_text);
    

    It worked for me.

    PS: This is added in jQuery 1.6.

    0 讨论(0)
  • 2020-11-21 05:24

    Extend jQuery:

    (function($) {
      $.fn.outerHTML = function() {
        return $(this).clone().wrap('<div></div>').parent().html();
      };
    })(jQuery);
    

    And use it like this: $("#myTableRow").outerHTML();

    0 讨论(0)
提交回复
热议问题