Як перетворити об’єкт jQuery в рядок?
Як перетворити об’єкт jQuery в рядок?
Відповіді:
Я припускаю, що ви просите повний рядок HTML. Якщо це так, щось подібне зробить трюк:
$('<div>').append($('#item-of-interest').clone()).html();
Це пояснюється більш глибоко тут , але по суті ви робите новий вузол, щоб обгортати цікавий предмет, робити маніпуляції, видаляти його та захоплювати HTML.
Якщо ви тільки після рядкового представлення, тоді перейдіть з new String(obj)
.
Оригінальну відповідь я написав у 2009 році. Станом на 2014 рік, більшість основних браузерів зараз підтримують outerHTML
як рідну власність (див., Наприклад, Firefox та Internet Explorer ), тож ви можете:
$('#item-of-interest').prop('outerHTML');
$(...)
є дійсним вузлом DOM.)
data
Ви можете бути трохи більш конкретним? Якщо ви намагаєтеся ввести тег 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>
Найкращий спосіб з’ясувати, які властивості та методи доступні для вузла (об’єкта) HTML - це зробити щось на кшталт:
console.log($("#my-node"));
З jQuery 1.6+ ви можете просто використовувати externalHTML, щоб включити HTML-теги у рядок виводу:
var node = $("#my-node").outerHTML;
$('#my-node').get(0).outerHTML
як у відповіді
.outerHTML
не працював для мене, але .prop('outerHTML')
робив.
Це, здається, добре працює для мене:
$("#id")[0].outerHTML
Прийнята відповідь не охоплює текстові вузли (невизначений роздруковується).
Цей фрагмент коду вирішує його:
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>
Не потрібно клонувати та додавати в DOM для використання .html (), ви можете:
$('#item-of-interest').wrap('<div></div>').html()
wrap()
повертає обгорнутий елемент, не той елемент, з яким він був обгорнутий? Отже, це повинно дати html #item-of-interest
не батьківського div
елемента (якщо jQuery не змінився з лютого 2012 року).
Якщо ви хочете впорядкувати 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();