2010-09-22 16 views
6

me trataron:¿Se puede usar jquery para agregar comentarios dinámicamente al código?

<script> 
$(function() { 
$('.class').before('<!--'); 
$('.class').after('-->'); 
}); 

</script> 

pero no funcionó por una razón desconocida para mí.

¿Alguien puede ayudarme a entender por qué no funcionó y cómo lo haría? Gracias, muy agradecido.

+0

¿Cómo estás mirando si funciona? No puedo evitar sentir que estás haciendo algo muy malo aquí. –

+2

¿Por qué querrías hacer esto? – Skilldrick

+1

¿por qué quieres hacer esto? Cualquier razón –

Respuesta

7

Parece que está intentando hacer desaparecer objetos con .class. Use .hide() en su lugar. Los comentarios solo se analizan cuando el navegador carga la página por primera vez, por lo que agregar comentarios no hará ningún comentario.

Necesita aprender la diferencia entre HTML y el DOM. HTML es la representación textual de la página, pero el navegador la analiza en el DOM en la carga de la página. JavaScript funciona en el DOM, no en el HTML. El uso de .innerHtml() en elementos DOM repars el HTML.

Here's an example de utilizar innerHtml() para ocultar los elementos que utilizan los comentarios HTML (pero tenga en cuenta que yo no hacer esto - yo sólo estoy mostrando cómo hacer lo que parecía que estaba tratando de hacer en su pregunta):

HTML:

<h1>hello</h1> 

<div> 
    <p>wow</p> 
    <p>dude</p> 
</div>​ 

Javascript (jQuery +):

$(document).ready(function() { 
    setTimeout(hideIt, 1000); 
}); 

function hideIt() { 
    $('div').html('<!--' + $('div').html() + '-->'); 
}​ 
+0

su hideIt es válido y responde esto, pero revertirlo no es tan fácil como si usara .detach() (vea mi ejemplo para una opción/patrón de uso) –

+0

@Mark - Como dije, nunca * * hacer algo como esto - solo estaba mostrando cómo agregar comentarios HTML como el OP quería hacer. – Skilldrick

+0

Sí, estoy de acuerdo, ¿por qué voté esta respuesta? Ver mi (más reciente) respuesta para una "solución" más directa/posiblemente mejor, que elimina la dependencia en el div externo. –

0

Creo que se necesitaría anteponer y anexar para hacerlo de la manera que estás pensando. Sin embargo, no estoy seguro de si realmente haría las cosas desaparecer.

Si quiere que algo no esté visible, su mejor opción sería usar hide().

0

Usar .hide() es una mejor manera de lograr lo que desea. También vale la pena mencionar que los objetos de comentarios son parte del DOM, por lo que en teoría podría manipularlos (o agregar otros nuevos) usando jQuery.

1

No, no puede agregar una etiqueta de recomendación de inicio y final como esa. La etiqueta de comentario es una etiqueta única, no es una etiqueta de inicio seprate y una etiqueta de finalización. Por lo tanto, <!-- y --> no son un fragmento de HTML válido, ya que no contienen etiquetas completas.

Si desea poner un elemento dentro de un comentario, ya no es un elemento, así que para hacerlo tendría que obtener el código HTML para el elemento, colocar una etiqueta de comentario alrededor y reemplazar el elemento con el comentario.

Si hace esto para ocultar el elemento, simplemente debe usar el método hide en su lugar.

4

Aquí está mezclando dos conceptos completamente no relacionados: el HTML y el DOM.

HTML es un medio textual del contenido de la descripción, que   — como el código   — tiene un medio de comentar las cosas. El DOM es el modelo de objeto resultante en el navegador.

Una vez que se ha leído y analizado el HTML y se ha creado el DOM, el HTML se descarta y es innecesario.Agregar comentarios HTML a las cosas no los cambiará, y de hecho no tiene sentido (aunque es fácil ver cómo pensaste que sería, no te hagas una idea equivocada).

Una vez que tenga el DOM, para ocultar un elemento sin eliminarlo, use hide. Para eliminarlo por completo, use remove.

ejemplos vivos de ambos: http://jsbin.com/araju

+1

+1 - exactamente lo que estaba tratando de decir sobre HTML y el DOM, pero mejor :) – Skilldrick

+0

Gracias, le hubiera agradecido antes, pero stackoverflow no me envió confirmaciones por correo electrónico. Terminé explorando Internet y encontré una solución .css. Style.display = "ninguno". La razón por la que tenía que hacer esto era para hacer un cargador de flash perezoso para flash, lo que logré, solo necesito perfeccionarlo ahora. – user455046

+0

@ user455046: * "... terminé explorando Internet y encontré una solución .css. Style.display =" none "..." * Sí, eso es lo que 'hide' hace. –

0

Algunas opciones:

$('.mycurrentclass').remove(); 

$('.mycurrentclass').detach();// see below for possible use 

$('.mycurrentclass').css({display:'none'}); 

$('.mycurrentclass').hide(); 

$('.mycurrentclass').toggleClass('myhiddenclass'); 

$('.mycurrentclass').addClass("myhiddenclass"); 

$("myselector").toggle(
    function() { 
    $(this).addClass("myhiddenclass"); 
    }, 
    function() { 
    $(this).removeClass("myhiddenclass"); 
    } 
); 

// programtic like you seem to want:(first part puts it back, else detaches it) 
var p; 
if (p) 
{ 
    p.appendTo("mywheretoappenditselector"); 
    p = null; 
} 
else 
{ 
    p = $("myselector").detach(); 
}; 
0

para proporcionar una respuesta más directa, el uso:

var gonee = $('.myclass'); 
$('.myclass').replaceWith('<!--' + gonee + '-->'); 

me ven en acción: http://jsfiddle.net/YNe6w/1/

+0

¿no quieres decir ''''? Esto actualmente agrega '' al DOM :) [en Chrome de todos modos] – Skilldrick

+0

En el modo de compatibilidad IE8, div "goner" ha desaparecido en la página de violín. Entonces, en teoría, el div que contiene el texto "goner" debería ser el contexto y, por lo tanto, eliminado/oculto por la adición de comentarios. –

+0

Marca - Como @Skilldrick señaló, el comentario termina pareciendo '' en lugar de 'goner

->'. Aunque el uso de '.html()' tampoco funcionaría. – user113716

0

los pls utilizan .html() para agregar el contenido html dinámicamente

por ejemplo:

$(.dv).click(function(){ 
$(".dy").html("abcd"); 
}); 
<div class=".dy" > 
</div> 

probarlo y esperamos que funcione para usted

2
$("<!--your comment text here -->").insertAfter(selector); 

o

$(selector).after("<!--your comment text here -->"); 

live demo

Cuestiones relacionadas