164 votes

Création d'un objet jQuery à partir d'une grande chaîne HTML

J'ai une grande chaîne HTML contenant plusieurs nœuds enfants.

Est-il possible de construire un jQuery Objet DOM utilisant cette chaîne ?

J'ai essayé $(string) mais il ne renvoie qu'un tableau contenant tous les noeuds individuels.

J'essaie d'obtenir un élément sur lequel je peux utiliser la fonction .find().

0 votes

Où est le HTML, que voulez-vous construire avec ? Vous pouvez consulter la fonction .find() : api.jquery.com/find

3 votes

Un objet jQuery est un objet de type tableau contenant tous les nœuds. Pouvez-vous préciser ce que vous essayez d'obtenir ?

1 votes

Où est "cette chaîne" ? Quelle chaîne ?

239voto

thecodeparadox Points 41614

Mise à jour :

A partir de jQuery 1.8, nous pouvons utiliser $.parseHTML qui analysera la chaîne HTML en un tableau de nœuds DOM. ex :

var dom_nodes = $($.parseHTML('<div><input type="text" value="val" /></div>'));

alert( dom_nodes.find('input').val() );

DEMO


var string = '<div><input type="text" value="val" /></div>';

$('<div/>').html(string).contents();

DEMO

Ce qui se passe dans ce code :

  • $('<div/>') est un faux <div> qui n'existe pas dans le DOM
  • $('<div/>').html(string) ajoute string dans ce faux <div> comme des enfants
  • .contents() récupère les enfants de ce faux <div> comme un objet jQuery

Si vous voulez faire .find() fonctionne alors essayez ceci :

var string = '<div><input type="text" value="val" /></div>',
    object = $('<div/>').html(string).contents();

alert( object.find('input').val() );

DEMO

1 votes

@user1033619 vous pouvez effectuer .find() opération également, vérifiez la démo

1 votes

Mais comment si string = '<input type="text" value="val" />'

1 votes

Si vous pouvez faire $("<div/>") pourquoi ne pouvez-vous pas faire $(string) ?

126voto

kiprainey Points 729

Depuis jQuery 1.8, vous pouvez utiliser parseHtml pour créer votre objet jQuery :

var myString = "<div>Some stuff<div>Some more stuff<span id='theAnswer'>The stuff I am looking for</span></div></div>";
var $jQueryObject = $($.parseHTML(myString));

J'ai créé un JSFidle qui en fait la démonstration : http://jsfiddle.net/MCSyr/2/

Il analyse la chaîne HTML arbitraire en un objet jQuery, et utilise find pour afficher le résultat dans un div.

10 votes

Je trouve cette réponse bien meilleure, puisque cela ne nécessite pas d'utiliser un élément div fantôme. $.parseHtml ftw.

3 votes

Cette réponse n'a pas fonctionné pour moi lorsque j'ai voulu ensuite utiliser $jQueryObject.find(), je suppose que c'est parce qu'il n'a pas été ajouté au domaine à ce moment-là.

0 votes

@dougajmcdonald -- find devrait fonctionner sans que le contenu soit ajouté au dom. Si vous jetez un coup d'œil à mon bidule ( jsfiddle.net/MCSyr/2 ), j'appelle find sur l'objet jQuery, et il renvoie un résultat comme prévu : $jQueryObject.find("#theAnswer").html()

13voto

Florian Margaine Points 16927
var jQueryObject = $('<div></div>').html( string ).children();

Cela crée un objet jQuery factice dans lequel vous pouvez placer la chaîne de caractères en HTML. Ensuite, vous obtenez uniquement les enfants.

2 votes

J'ai essayé cela, mais cela ne fonctionne pas avec la fonction .find() que je dois utiliser plus tard.

3 votes

@user1033619 tu dois utiliser .filter() au lieu de .find() .

2voto

Loourr Points 857

Il existe également une grande bibliothèque appelée cheerio conçu spécifiquement pour cela.

Mise en œuvre rapide, souple et légère du noyau de jQuery, conçue spécifiquement pour le serveur.

var cheerio = require('cheerio'),
    $ = cheerio.load('<h2 class="title">Hello world</h2>');

$('h2.title').text('Hello there!');
$('h2').addClass('welcome');

$.html();
//=> <h2 class="title welcome">Hello there!</h2>

2voto

Anthony Points 21

J'utilise les éléments suivants pour mes modèles HTML :

$(".main").empty();

var _template = '<p id="myelement">Your HTML Code</p>';
var template = $.parseHTML(_template);
var final = $(template).find("#myelement");

$(".main").append(final.html());

Note : En supposant que vous utilisez jQuery

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X