2011-11-14 17 views
13

Dire che hoelemento jQuery ottenere DOM come stringa

$(":input[type=text]:first") 

Come faccio ad avere

<input type="text" value="" size="28" maxlength="140" tabindex="1" placeholder="search" class="textbox" name="q" autocomplete="off"> 

Supponendo corro questo su SO?

Aggiornamento Non voglio chiamare .parent() poiché ho un sacco di altre cose nell'elemento padre.

+1

Solo una nota: si dovrebbe citare le vostre selettori di attributo. '$ (": Input [type = 'text']: primi")'. –

+0

Sì, era solo un esempio, non è il vero selettore. Di solito cerco ed evito di usare i selettori di attributo comunque. – bevacqua

+1

possibile duplicato di [Ottieni HTML esterno dell'elemento selezionato] (http://stackoverflow.com/questions/2419749/get-selected-elements-outer-html) – Blazemonger

risposta

20

An old trick:

var selector = ":input[type=text]:first"; 

var str = $(selector).clone().wrap('<div/>').parent().html(); 

Aggiornamento Non è necessario preoccuparsi di chiamare .parent() in quanto si sta lavorando con un clone orfano del selettore originale.

+1

Perché il clone è importante? Se sto creando un oggetto al volo, sarebbe questo? – casraf

+1

L'elemento interno non viene creato al volo; viene selezionato dal DOM, quindi lo cloniamo per evitare di alterare il DOM. – Blazemonger

+0

Che dire di $ ("a"). Html (''). Prop ("outerHTML"))? –

4

Utilizzare jQuery.html() aggiungendo un elemento creato.

$('<div/>').append($(":input[type=text]:first").clone()).html() 

Questo vuole essere un violino fornendo un esempio: http://jsfiddle.net/Zwbmx/1/

+1

Ma ora hai spostato l'elemento originale fuori dal DOM. – Blazemonger

+0

Questo rimuoverà l'input dal DOM e lo aggiungerà a un div appena creato. Devi prima clonare l'input. –

+0

@Rocket your right Ho modificato il codice per clonare prima l'elemento. –

-1

ne dite:

var str = $(selector)[0] 

magari aggiungere un assegno che ci sia un elemento restituito.

0

In seguito a ciò che @Blazemonger ha risposto, se si invia questo contenuto html al server, vale la pena di eliminare tutti i tag non necessari, spazi bianchi e interruzioni di riga che non aggiungono alcun valore.

var quote = $(".invoice") //get hidden print-version DOM element 
    .clone() 
    .wrap('<div/>') 
    .parent() 
    .html() 
    .replace(/ /g, '') //get rid of indentation spaces 
    .replace(/(\r\n|\n|\r)/gm, "") //get rid of line breaks 
    .replace(/<!--[\s\S]*?-->/g, ""); //get rid of comment tags 

mio html avevano 50kb, dopo essersi liberati di questa roba, ha ottenuto ridotti a 4 KB!

25

Come su

$(selector).prop("outerHTML"); 
+1

Questa dovrebbe essere la risposta corretta –

Problemi correlati