Як перетворити об’єкт jQuery в рядок?


Відповіді:


602

Я припускаю, що ви просите повний рядок HTML. Якщо це так, щось подібне зробить трюк:

$('<div>').append($('#item-of-interest').clone()).html(); 

Це пояснюється більш глибоко тут , але по суті ви робите новий вузол, щоб обгортати цікавий предмет, робити маніпуляції, видаляти його та захоплювати HTML.

Якщо ви тільки після рядкового представлення, тоді перейдіть з new String(obj).

Оновлення

Оригінальну відповідь я написав у 2009 році. Станом на 2014 рік, більшість основних браузерів зараз підтримують outerHTMLяк рідну власність (див., Наприклад, Firefox та Internet Explorer ), тож ви можете:

$('#item-of-interest').prop('outerHTML');

25
Це гадає, що не існує способу просто зробити це, але це прекрасне рішення незалежно.
Стів

2
це видаляє мітки голови та тіла
ıl

1
@ user85461 Хоча це не дійсний вузол DOM, тому було б неправильно намагатися викликати на ньому externalHTML. (Лише крихітний підмножина того, що може увійти, $(...)є дійсним вузлом DOM.)
Джон Фемінелла,

1
@Moss дає вам внутрішній html або простіше те, що знаходиться всередині елемента, тоді як externalHtml дає вам елемент в цілому
zakius

2
Зауважте, що ви програєтеdata
Олег

190

З jQuery 1.6 це здається більш елегантним рішенням:

$('#element-of-interest').prop('outerHTML');

5
@ Jean-PhilippeLeclerc У Firefox 15.0.1 (Linux) це працює як шарм.
Дейв

51

Просто скористайтеся .get (0), щоб схопити власний елемент та отримати його зовнішнє властивістьHTML:

var $elem = $('<a href="#">Some element</a>');
console.log("HTML is: " + $elem.get(0).outerHTML);

Так набагато краще, оскільки воно зберігає і мої атрибути. Дякую!
Рохіт

21

Ви можете бути трохи більш конкретним? Якщо ви намагаєтеся ввести тег HTML у тег, ви можете зробити щось подібне:

Фрагмент HTML:

<p><b>This is some text</b></p>

jQuery:

var txt = $('p').html(); // Value of text is <b>This is some text</b>

9

Найкращий спосіб з’ясувати, які властивості та методи доступні для вузла (об’єкта) HTML - це зробити щось на кшталт:

console.log($("#my-node"));

З jQuery 1.6+ ви можете просто використовувати externalHTML, щоб включити HTML-теги у рядок виводу:

var node = $("#my-node").outerHTML;

4
це $('#my-node').get(0).outerHTMLяк у відповіді
mppfiles

1
.outerHTMLне працював для мене, але .prop('outerHTML')робив.
dnns

7

jQuery тут, так що:

jQuery.fn.goodOLauterHTML= function() {
    return $('<a></a>').append( this.clone() ).html();
}

Повернути всі ті речі HTML:

$('div' /*elys with HTML text stuff that you want */ ).goodOLauterHTML(); // alerts tags and all

4

Це, здається, добре працює для мене:

$("#id")[0].outerHTML

2
Я також використовував це, але це, здається, не працює для Firefox 6.0.1.
mikong

2

Прийнята відповідь не охоплює текстові вузли (невизначений роздруковується).

Цей фрагмент коду вирішує його:

var htmlElements = $('<p><a href="http://google.com">google</a></p>↵↵<p><a href="http://bing.com">bing</a></p>'),
    htmlString = '';
    
htmlElements.each(function () {
    var element = $(this).get(0);

    if (element.nodeType === Node.ELEMENT_NODE) {
        htmlString += element.outerHTML;
    }
    else if (element.nodeType === Node.TEXT_NODE) {
        htmlString += element.nodeValue;
    }
});

alert('String html: ' + htmlString);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1

Не потрібно клонувати та додавати в DOM для використання .html (), ви можете:

$('#item-of-interest').wrap('<div></div>').html()

1
Але чи не wrap()повертає обгорнутий елемент, не той елемент, з яким він був обгорнутий? Отже, це повинно дати html #item-of-interest не батьківського divелемента (якщо jQuery не змінився з лютого 2012 року).
Девід каже повернути Моніку

0

Можливе використання функції jQuery.makeArray(obj)корисності:

var obj = $('<p />',{'class':'className'}).html('peekaboo');
var objArr = $.makeArray(obj);
var plainText = objArr[0];

0

Якщо ви хочете впорядкувати HTML-елемент, щоб передати його куди-небудь і проаналізувати його назад до елемента, спробуйте створити унікальний запит для елемента:

// 'e' is a circular object that can't be stringify
var e = document.getElementById('MyElement')

// now 'e_str' is a unique query for this element that can be stringify 
var e_str = e.tagName
  + ( e.id != "" ? "#" + e.id : "")
  + ( e.className != "" ? "." + e.className.replace(' ','.') : "");

//now you can stringify your element to JSON string
var e_json = JSON.stringify({
  'element': e_str
})

ніж

//parse it back to an object
var obj = JSON.parse( e_json )

//finally connect the 'obj.element' varible to it's element
obj.element = document.querySelector( obj.element )

//now the 'obj.element' is the actual element and you can click it for example:
obj.element.click();

-4
new String(myobj)

Якщо ви хочете серіалізувати весь об'єкт до рядка, використовуйте JSON .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.