2013-03-21 10 views
6

Sto cercando un modo per avvolgere, con jQuery, un elemento in un commento, come:jQuery commento/decommentare <! - elemento ->

<!-- 
<div class="my_element"></div> 
--> 

e anche un modo per rimuovere i commenti .

È possibile? perché non ho potuto trovare nulla di relativo.

+4

Sarebbe utile sapere che cosa il vostro caso d'uso è. Non riesco a pensare a molte situazioni in cui questa è la cosa giusta da fare, piuttosto che nascondere l'elemento o rimuoverlo dal DOM e aggiungerlo in un secondo momento. – SamStephens

+0

Non ho mai visto qualcosa del genere :) considera di nasconderlo, il risultato è lo stesso. Nascosto dallo schermo, ma visibile sul codice sorgente, stesso risultato. – gpasci

+0

Non riesco a nasconderlo, perché uso qualche plugin jQuery, simile alla muratura, che lo sta rimuovendo. – George

risposta

15

per avvolgere un elemento con un commento, o più specificamente per sostituire un elemento con un nodo di commento con l'HTML di quell'elemento:

my_element_jq = $('.my_element'); 
comment = document.createComment(my_element_jq.get(0).outerHTML); 
my_element_jq.replaceWith(comment); 

Per tornare indietro:

$(comment).replaceWith(comment.nodeValue); 

Se non si ha il riferimento al nodo commento allora avete bisogno di attraversare l'albero DOM e verificare nodeType di ogni nodo. Se il suo valore è 8, allora è un commento.

Ad esempio:

<div id="foo"> 
    <div>bar</div> 
    <!-- <div>hello world!</div> --> 
    <div>bar</div> 
</div> 

JavaScript:

// .contents() returns the children of each element in the set of matched elements, 
// including text and comment nodes. 
$("#foo").contents().each(function(index, node) { 
    if (node.nodeType == 8) { 
     // node is a comment 
     $(node).replaceWith(node.nodeValue); 
    } 
}); 
+0

Questo funziona totalmente! Grazie mille! – LittleTreeX

-2

Per il confezionamento?

function wrap(jQueryElement){ 
    jQueryElement.before("<!--").after("-->"); 
} 

Non sono sicuro di quanto riusciresti a trovare i commenti una volta che sono stati spostati. Una ricerca di testo sull'elemento del corpo usando le espressioni regolari è un'opzione.

O questo - is it possible to remove an html comment from dom using jquery

+3

questo non funziona: http://jsfiddle.net/zjjBE/tratta il primo come sia un open e close, e il 2 ° come una stringa. –

+0

Abbastanza giusto. Stoopid in ogni caso;) – LiverpoolsNumber9

2

Puoi commentare l'elemento fuori nel modo seguente:

function comment(element){ 
    element.wrap(function() { 
     return '<!--' + this.outerHTML + '"-->'; 
    }); 
} 

DEMO: http://jsfiddle.net/dirtyd77/THBpD/27/

+0

Grazie, ma non è possibile decommentarlo, giusto? – George

+1

Ancora in discussione, ti farò sapere :) – Dom

+1

this.outerHTML dovrebbe essere sufficiente, non è necessario $() –

Problemi correlati