大きなHTML文字列からjQueryオブジェクトを作成する


140

複数の子ノードを含む大きなHTML文字列があります。

この文字列を使用してjQuery DOMオブジェクトを構築することは可能ですか?

私は試しました$(string)が、すべての個々のノードを含む配列のみを返します。

.find()関数を使用できる要素を取得しようとしています。


HTMLはどこにありますか。HTMLで何を構築しますか?.find()関数を確認することをお勧めします:api.jquery.com/find
Control Freak

3
jQueryオブジェクト、すべてのノードを含む配列のようなオブジェクトです。あなたが達成しようとしていることについて詳しく説明できますか?
フレデリックハミディ2012年

「この文字列」はどこにありますか?何の文字列?
Viezevingertjes 2012年

ここを見てください、それはあなたが望むものだと思います stackoverflow.com/q/759887/474535
bart s

文字列を介して1つのWebViewから別のWebViewに要素を渡す必要があります。文字列はその要素のHTMLソースにすぎません。私はjQueryオブジェクトが何であるかを誤解しているかもしれないと思います。
user1033619

回答:


200

更新:

jQuery 1.8以降では、HTML文字列をDOMノードの配列に解析する$ .parseHTMLを使用できます。例えば:

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

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

デモ


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

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

デモ

このコードで何が起こっているのか:

  • $('<div/>')<div>DOMに存在しない偽物です
  • $('<div/>').html(string)stringその偽物内に<div>子供として追加します
  • .contents()その偽の子を<div>jQueryオブジェクトとして取得します

あなたが.find()仕事をしたいなら、これを試してください:

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

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

デモ


1
@ user1033619あなた.find()も操作を実行できます、デモをチェックしてください
thecodeparadox

しかし、もしもstring = '<input type="text" value="val" />'
fdrv 2014年

1
できるなら$("<div/>")、どうしてできないの$(string)
xr280xr 2016

2
より複雑なHTMLでは、.contentsを削除してこれを機能させる必要がありました。jsfiddle.net/h45y2L7v
Simon Hutchison

内容を取得するラッピングdivが必要なため、$(string)を実行する必要はありません。入力となるdivのコンテンツを取得します。
Michael Khalili 2017年

120

jQuery 1.8以降では、parseHtmlを使用して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));

これを示すJSFidleを作成しました:http ://jsfiddle.net/MCSyr/2/

任意のHTML文字列をjQueryオブジェクトに解析し、findを使用して結果をdivに表示します。


10
これはゴーストdiv要素を使用する必要がないので、この答えははるかに優れています。$ .parseHtml ftw。
ZeeCoder 2013

2
この回答は、私が望んでいたときに$ jQueryObject.find()に対して機能しませんでした。その時点でdomに追加されていなかったためと思います。
dougajmcdonald 2013年

@dougajmcdonald-コンテンツはdomに追加されなくても機能するはずです。私のフィドル(jsfiddle.net/MCSyr/2)を見ると、jQueryオブジェクトでfindを呼び出しており、期待どおりの結果が返されます。$ jQueryObject.find( "#theAnswer")。html()
kiprainey 2013年

1
@kipraineyおもしろい。私にとってはうまくいかなかった例を掘り下げて、他に何か問題があるかどうかを確認する。それは他のロジックのロード内のTypeScriptモジュール内に記述されていましたが、別の問題であった可能性もあります!謝罪いたします。
dougajmcdonald 2013年

8
parseHTMLがjQuery 1.8
Jean-Michel Garcia

12
var jQueryObject = $('<div></div>').html( string ).children();

これにより、ストリングをHTMLとして配置できるダミーのjQueryオブジェクトが作成されます。次に、あなただけの子供を取得します。


2
iveはこれを試しましたが、後で使用する必要がある.find()関数では機能しません。
user1033619

3
@ user1033619の.filter()代わりに使用する必要があり.find()ます。
Kulbir Saini、2015

2

このために特別に設計されたcheerioと呼ばれる素晴らしいライブラリもあります。

サーバー専用に設計されたコアjQueryの高速で柔軟な無駄のない実装。

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>

1

私は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());

注:jQueryを使用している場合


1

$(string)が機能しない理由は、jqueryが$()間のHTMLコンテンツを見つけられないためです。したがって、最初にhtmlに解析する必要があります。htmlを解析した変数を取得したら、次に、$(string)を使用して、オブジェクトで使用可能なすべての関数を使用できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.