2009-06-29 15 views
2

Ich habe die folgende HTML-Struktur von einer AJAX-Anforderung zurückgegeben werden ...jQuery Html Manipulation Frage

<th scope="col" style="yada,yada,yada"> 
<a href="javascript:funcName();" style="yada,yada,yada"> 
Test<br />Heading</a></th> 
<th scope="col" style="yada,yada,yada"> 
<a href="javascript:funcName2();" style="yada,yada,yada"> 
Test<br />Heading2</a></th> 

Und ich will diese manipulieren, so dass das Endergebnis ist ...

<th>Test<br />Heading</th> 
<th>Test<br />Heading2</th> 

Ich möchte im Grunde die Inline-Stile entfernen und den Text aus dem Hyperlink extrahieren. Wie kann ich das einfach mit jQuery machen?

Antwort

4

Unter der Annahme, $data wird die analysierte DOM-Struktur oben ...

$data.find('th').each(function() { 
    $(this).removeAttr('scope').removeAttr('style').html(
     $(this).find('a').html() 
    ); 
}).appendTo(selector); 
+1

Geht nicht viel einfacher als das !! Fantastisch, danke. –

+1

Eine Sache hinzuzufügen. Für das, was es wert ist, musste ich es nicht auf eine Variable setzen. Ich hatte eine Var wie folgt: var tbl = $ (xhr.responseText) und alles, was ich tun musste, war, deinen Code so zu nennen: tbl.find ('th'). Je (function() {etc .. .}) und später habe ich nur Tbl an ein Element angehängt und es hat super funktioniert. –

+0

Hmmm. Ich nehme an, dass ich immer angenommen habe, dass jede interne Methode unveränderlich ist (daher das "Verkettungs" -Paradigma). –

0

Es scheint, wie der einfachste Ansatz wäre, den Text zu markieren und dann die neuen TH-Elemente erstellen verwenden, die leicht getan werden können, in jQuery. in einer Variablen namens Daten Ihre Daten Angenommen, Sie so etwas wie tun wollen würde:

var newTH = ''; // To store as you go 
$("th a", data).each(function(){ // Loop over all anchors in THs 
    newTH += "<th>" + $(this).html() + "</th>"; // Pull out the innerHTML of the anchor, wrap in TH 
}); 

Die Newth Variable jetzt ein Stück HTML sein würde, die Sie jQuery in die Tabelle des anhängen nutzen könnten.

Ich würde empfehlen, es zuerst als String aufzubauen, einfach aus Gründen der Geschwindigkeit. Das Bearbeiten und Ändern der DOM-Elemente funktioniert, aber abhängig davon, wie viele THs Sie bekommen, sollte dies theoretisch etwas schneller sein.

+1

Ich wäre schockiert, wenn das Anhängen von Strings, wie Sie es tun, für große Datenmengen schneller ist, was die einzige Situation ist, in der die Geschwindigkeit relevant wäre. –

+0

Ich basiere das aus Informationen gezogen von http://www.learningjquery.com/2009/03/43439-Reasons-use-append-correctly - die scheint eher vertrauenswürdig und wiederholbar. :) Auch Geschwindigkeit ist in diesem Fall nicht unbedingt relevant, aber es tut nie weh, Dinge beim ersten Mal richtig zu machen. :) –

+0

Der Grund, warum die ersten Beispiele auf dieser Seite langsam sind, liegt darin, dass es append bei jeder Iteration aufruft, was nicht das Richtige ist - mein Beispiel hat das nie getan. Wie Sie sehen können, geht es weiter darum, dass Strings nicht die besten sind, aber stattdessen ist es am besten, alles in ein Array zu schreiben und am Ende einmal anzuhängen. In dieser Situation spielt es keine Rolle, denn anstatt Elemente zu erstellen, die teurer sind, modifizieren wir nur etwas, das bereits existiert. –