3

我有一堆具有数据属性的元素:

<span data-product_attribute="title" data-product_id="12">product title</span>
<span data-product_attribute="vendor" data-product_id="12">product vendor</span>

我正在使用一个 jQuery 选择器来抓取它们并将它们放在一个列表中进行处理:

$('span[data-product_attribute]').map(function() {
    var o = {};
    o.name = $(this).attr("data-product_attribute");
    o.value = $(this).html(); // ** this line is not what I want **
    return o;
}).get()

html()方法只返回<span>标签内包含的内容,但我想要的是全部内容。即我试图让它这样做:

o.value = '<span data-product_attribute="title" data-product_id="12">product title</span>'

是否有一个 jQuery 方法可以返回由 表示的所有内容$(this)

4

4 回答 4

2

您需要元素的“outerhtml”。某些浏览器可以通过该.outerHTML属性提供此功能。

如果做不到这一点,在我对相关问题的回答中有一个微不足道的插件:

(function($) {
    $.fn.outerhtml = function() {
        return $('<div/>').append(this.clone()).html();
    };
})(jQuery);
于 2013-02-25T14:00:19.453 回答
1

示例 HTML:

 <div id="testing">
    <span data-product_attribute="title" data-product_id="12">product title</span>
    <span data-product_attribute="vendor" data-product_id="12">product vendor</span>
 </div>

Javascript:

 function getHtml(elem) {
     var tmp = $('<div />');
     tmp.append(elem);
     return $(tmp).html();
 }    

 $('span[data-product_attribute]').map(function() {
     var o = {};
     o.name = $(this).attr("data-product_attribute");
     o.value = getHtml($(this));
     alert(o.value);
     return o;
 }).get()
于 2013-02-25T14:07:33.037 回答
0

你可以很容易地通过 JavaScript 做到这一点:

$(this).get(0).outerHTML;

如有必要,您可以使用此插件:

$.fn.outerHTML = function(){
    return (!this.length) ? this : (this[0].outerHTML || (
      function(el){
          var div = document.createElement('div');
          div.appendChild(el.cloneNode(true));
          var contents = div.innerHTML;
          div = null;
          return contents;
    })(this[0]));
}
于 2013-02-25T13:58:47.773 回答
0

用这个...

$('#mydiv').on('click', function(){
    console.log(this.outerHTML);
});

看这个例子

于 2013-02-25T14:16:49.770 回答