Es posible encontrar un elemento dentro de una cadena de código HTML en lugar de desde el DOM? Ejemplo,

var html = "<div><span class='find-me'></span></div>"

$("html").find(".find-me").remove();
  • Es posible, pero para los casos complicados de encontrar y manipular, tendría que ser con eficacia escribir un analizador de HTML a ti mismo. Si usted está buscando un único id o una clase, de una expresión regular probablemente haría el truco. Si usted está tratando de eliminar un nodo que tiene los niños, se vuelve mucho más complicado, y usted puede también mirar en XML/HTML parser bibliotecas.
  • jQuery analiza el código html, el único «error» en el fragmento de código anterior es que él está usando la cadena de "html" y por el que coinciden el elemento html en lugar de usar su html variable como argumento para la función jQuery. También no hay necesidad de escribir un analizador DOM como uno puede usar el navegador para analizar la cadena…
  • no complicado o difícil en absoluto, ¿de dónde sacas esa idea?
  • He leído la pregunta por su valor nominal, y se supone que él quería para el uso puro de la cadena de manipulación, en lugar de leer la intención de manipular con jQuery. También me gustaría, asumió la fuente fue pseudocódigo, en lugar de JavaScript. Supongo que JQuery puede ser considerado un analizador de HTML 😉
InformationsquelleAutor | 2015-02-25

4 Comentarios

  1. 5

    Están muy cerca, envuelva la variable en $()

    var $div = $(html);
    $div.find(".find-me").remove();

    Si quieres volver a la cadena puede hacer algo como:

    var htmlString = $('<div>').append($div).html();
    • No hacer trampa 😉 ? $(html) construye una estructura dom (aunque no dentro de la página del árbol dom). Yo estoy bajo la impresión de que el OP direcciones de una búsqueda en la representación léxica solo, sin analizar.
    • Yo creo que tu interpretación es errónea. Puede manipular fragmentos de html fuera de la DOM también y esto puede volver fácilmente a la cadena si es necesario
    • Quiero encontrar el elemento dentro de la cadena, y si existe algo que hacer. if( $div.find(«.encontrar-me»).de longitud ) {}. Pero no parece estar funcionando.
    • Sí, pero que se supone que han analizado el código html de la cadena de antes.
    • dependerá de que exista un ancestro con esa clase, también puede tratar de filter() si es a nivel de la raíz
    • Nope. Su sólo una cadena de HTML que no ha sido analizado.
    • enfoque me dio funciona bien, lo han hecho muchas, muchas veces para manipular html cadenas … quita, cambios de clase , insertar, etc
    • .filter() hizo el trabajo, en lugar de .find()
    • Que resuelve la controversia, supongo 😉
    • En realidad tengo otra pregunta. También es posible obtener el valor de un atributo eso es dentro de la cadena así? puedo tratar los nodos en la cadena similar a la real de los elementos en el DOM?
    • Sí, usted puede utilizar cualquier método jQuery en la misma, como si es en el DOM. Por ejemplo, si hay una entrada, y que quería que el valor de se puede utilizar val() para conseguirlo. O uso data() o attr() o addClass() etc

  2. 0

    Es, pero es propenso a errores y poco fiables. Considere la posibilidad de <div><span class='find-me'>Devious web designer writes class='find-me' inside a text segment</span></div> – ciertamente artificial pero en mi humilde opinión ilustrativa.

    Usted está buscando para la información de la estructura en semi-estructurada el contenido. ¿Por qué usted desea hacer su vida más difícil por la búsqueda en _un_structured contenido ?

    • ¿por qué dice que es propensa a errores y poco fiable? Nunca han tenido un solo problema en hacer lo mismo y lo han hecho muchas, muchas veces
    • He hecho eso también, pero sin realmente analizar el html (es decir. al trabajar en el lexcalisation solo) es una completa pesadilla.
  3. 0

    Si el HTML es una cadena, sólo podría utilizar javascript para el tratamiento de una cadena de utilizar la función de reemplazar, algo así como:

    var html = "<div><span class='find-me'></span></div>"
    html = html.replace("find-me", ""); 
    alert(html)

    En este caso, después de que la reemplace, html sería:

    <div><span class=''></span></div>

    Aquí está el El violín

    • Esto sólo reemplaza la primera ocurrencia de ‘la búsqueda’. Por otra parte, incluso cuando se utiliza replace(/find-me/g, '') que se enfrentan con el problema de que los nombres de clase en los nodos de texto del html será reemplazado demasiado.
    • Yo realmente no quiere eliminar el elemento, no sé por qué he añadido quitar. De hecho, quiero que para ejecutar un código si el elemento no existe dentro de la cadena HTML.
    • Problema Similar.Usted no sabe si usted coincide con una aparición en los nodos de texto o en una etiqueta de apertura.
    • si @Shabbb se refiere a este como una cadena solo (no el elemento DOM) esto debería funcionar (en sustitución de la primera aparición de la cadena). Actualizado el violín utilizando indexof para determinar si la cadena existe jsfiddle.net/5cph5tox/1
  4. 0

    Se podría analizar la cadena con DOMParser();

     var html = "<div><span class='find-me'></span></div>"
     dom_doc = new DOMParser().parseFromString(html, "text/xml");
     $(dom_doc).find('#foo').remove();

Dejar respuesta

Please enter your comment!
Please enter your name here