Ich weiß, ich kann es .html() in einem Tag wickeln, aber das Element selbst hat eine dynamisch gesetzte ID, Klasse, etc. Wie bekomme ich jQuery das Element Markup einschließlich sich selbst zurückzugeben?Wie bekomme ich das Markup eines Elements, einschließlich sich selbst mit jQuery?
Antwort
Soweit ich weiß, gibt es keine „Outerhtml“ Unterstützung direkt in jQuery, aber Sie können eine Funktion schreiben, ihn nachzuahmen (in anderen Browsern als IE) oder this plugin verwenden:
// this will return the element and it's mark-up, of an element
// with the id myTag
var outer = $('#myTag').outerHTML();
Offensichtlich Brandon ist nicht die einzige Implementierung .. ich bin sicher, dass Sie auch mit anderen klugen Implementierungen kommen konnte ..
EDIT
Wenn Sie auf die Vermeidung der Anrufe scharf sind anhängen, vielleicht haben Sie so etwas wie dies versuchen könnte ..
function getOuterHTML(el)
{
var wrapper = '';
if(el)
{
var inner = el.innerHTML;
var wrapper = '<' + el.tagName;
for(var i = 0; i < el.attributes.length; i++)
{
wrapper += ' ' + el.attributes[i].nodeName + '="';
wrapper += el.attributes[i].nodeValue + '"';
}
wrapper += '>' + inner + '</' + el.tagName + '>';
}
return wrapper;
}
// now, to replicate the sample above
var outer = getOuterHTML($('#myTag'));
Die einzige Sache ist, ich bin nicht sicher, ob alle Browser die Attribute Array unterstützen .. aber ich weiß, dass die mozilla-Familie diejenigen tun, und IE hat native Unterstützung für Outerhtml .. Probieren Sie es aus (für diejenigen, die das Attributfeld nicht unterstützen, könnten Sie die vorherige Methode verwenden, die anfügt)
Ich hätte das vorher sagen sollen, aber ich arbeite mit einer extremen Anzahl von Elementen und habe kürzlich herausgefunden, dass .append() ein Prozessor-Schwein ist. Irgendeine Möglichkeit, dies ohne .append() zu tun? –
@Justin, siehe das Beispiel, das ich der Antwort hinzugefügt habe. Es verwendet keine Anhänge. –
Ich mag Ihren Code. Wirklich cool! – Shiva
This blog post könnte Ihnen helfen.
Er beschreibt eine Technik, die wie folgt aussieht:
var html = $('<div>').append($('#top').clone()).remove().html()
Das die div von Interesse klont, hängt es an einem Wrapper-div und bekommt dann den HTML-Code der Wrapper - die mit dem ursprünglichen HTML entspricht der der erste div.
Sein Vorschlag, es zunächst nur in einem deklarierten Wrapper Div zu umgeben, scheint jedoch ein besserer Weg zu sein. Dann müssten Sie sich nicht mit all dem beschäftigen.
Ohne Code, wählen Sie das Element, wählen Sie das erste innere Element, erhalten Sie seine Eltern (die Sie wollen) dann wickeln Sie es um die ursprüngliche Auswahl von youElement.html().
Das wird alle Kinder des Elternteils zurückgeben. Nicht nur das ausgewählte Kind oder die ausgewählten Kinder. – Henry
Uhm, brauchen Sie nicht ein Plugin zu verwenden, ich bin sicher, dass Sie
// this uses the jquery selectors, then returns the DOM element,
// which then u can use the standard outterHTML...
$('#myelement').get(0).outerHTML;
bearbeiten versuchen können: Wenn Ihre Jquery Selektoren sind mehr als ein Element übereinstimmt, können Sie durch sie Schleife finden zu dem jquery docs für Beispiele
OuterHTML (es ist eine Eigenschaft, keine Funktion btw) wird nicht in Firefox unterstützt (ich denke, nur IE unterstützt es) –
oh das ist richtig. –
Das wird gut funktionieren:
jQuery.fn.outer = function() {
return $($('<div></div>').html(this.clone())).html();
}
+1 - das ist bei weitem die beste Lösung dafür. :) – xil3
wenig spät auf diese Frage. Wenn Sie jQuery verwenden, um ein Objekt zu finden, können Sie den folgenden Code verwenden, um das outerHTML zu erhalten.
HTML:
<div class="obj">
<a href="#" class="link">Link</a>
</div>
jQuery:
var $obj = $('.obj .link');
var outerHTML = $obj[0].outerHTML;
Das wird ausgegeben <a href="#" class="link">Link</a>
. Getestet auf Neueste Chrome, Neueste Firefox und IE11.Hier ist ein Link zu einem Codepen: http://codepen.io/aj372/pen/ZLmYbj
- 1. Mit jQuery, wie bekomme ich den Textwert eines Elements?
- 2. Wie bekomme ich die Breite eines Elements?
- 3. Wie bekomme ich innerWidth eines Elements in jquery WITHOUT scrollbar
- 4. Erstellen eines Elements, das es selbst entfernen kann?
- 5. Wie bekomme ich den Index eines Elements ohne 'dieses'?
- 6. Wie bekomme ich die oberste Position eines Elements?
- 7. Wie bekomme ich die Farbe eines Elements mit angularjs
- 8. jQuery sortierbaren Tropfen in sich selbst
- 9. Wie bekomme ich die Hintergrundfarbe eines Elements mit Javascript?
- 10. Wie bekomme ich die Elemente clientX und clientY eines Elements?
- 11. Wie bekomme ich Text innerhalb eines Elements mit Kindern mit jQuery
- 12. Wie bekomme ich das vorherige Element mit jquery each()
- 13. Wie entferne ich den Inhalt eines Elements mit JQuery?
- 14. Wie bekomme ich die jQuery-Validierung, um das gleiche Markup wie die serverseitige ASP.NET MVC-Validierung zu erzeugen?
- 15. XQuery: Rückgabewert eines Elements eher das Element selbst
- 16. Wie kann ich den Randfarbwert eines Elements mit jQuery ermitteln?
- 17. Wie bekomme ich das Formular html() über jQuery, einschließlich aktualisierter Wertattribute?
- 18. Wie finde ich die absolute Position eines Elements mit jQuery?
- 19. Den Typ eines Elements mit jQuery finden
- 20. Anpassen eines JQuery-Elements
- 21. Wie bekomme ich die Kinder eines Elements WPF
- 22. Wie bekomme ich den Pfad eines Elements in lxml?
- 23. Zurückgegebene Textlänge eines Elements (jquery)
- 24. SAX: Wie bekomme ich den Inhalt eines Elements?
- 25. Wie bekomme ich die Position eines Elements in einem StackPanel?
- 26. Wie bekomme ich die Kinder eines Elements in Wattin?
- 27. Wie bekomme ich den Index des aktuellen Elements in Bezug auf das übergeordnete Element mit jQuery?
- 28. Wie bekomme ich die ID des Elements
- 29. Wie bekomme ich ein PNG-Bild eines CSS-gestylten Elements, das Canvas mit transparentem Hintergrund verwendet?
- 30. Xpath - Wie bekomme ich alle Attributnamen und Werte eines Elements
Ich hätte dies zuvor gesagt, aber ich arbeite mit einer extremen Anzahl von Elementen und kürzlich herausgefunden, dass .append() ist ein Prozessor Schwein. Irgendeine Möglichkeit, dies ohne .append() zu tun? –