0

jQueryを使用してスパンを選択しようとしているテキスト文字列があります。domに要素を追加せずにスパンを取得したいのですが、可能であれば?

jqueryのドキュメントを読んだ後、文字列をjqueryセレクタータグでラップし、.find()を使用して必要な要素を見つけることでフラグメントを作成できると思いました。

これに似たコードがありますが、最後の行の外観から、スパンが選択されていないことは明らかです。どんな助けでも大歓迎です:

// 'text' is normally generated automatically... 
// just made it an escaped string for example purposes.
var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>";
var spans = $(text).find('span');
console.log(text); // => <span id="blah1">Y</span><br/><span id="blah2">o</span><br/>
console.log(spans.length); // => 0 

ありがとう。

4

2 に答える 2

9

filter()ではなく、使用したいfind()

var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>";
var spans = $(text).filter('span');
console.log(spans.length);

jsフィドル

jQueryのドキュメントから

フィルター:

提供されたセレクターは、各要素に対してテストされます。セレクターに一致するすべての要素が結果に含まれます。

探す:

.find() メソッドを使用すると、DOM ツリー内のこれらの要素の子孫を検索し、一致する要素から新しい jQuery オブジェクトを構築できます。

あなたのhtmlフラグメントでは、ラッパー要素がないため、子孫がないため、find()が機能しないのはなぜですか。

あなたは基本的にやっています:

var elems = jQuery("<span id=\"blah1\">Y</span>").add("<br/>").add("<span id=\"blah2\">o</span>").add("<br/>");

find を で動作させたい場合find()は、要素でラップする必要があります。

var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>"; 
var spans = jQuery("<div></div>").append(text).find("span");
console.log(spans.length);
于 2011-11-07T02:35:20.047 に答える
1

この場合に使用したいfilter

var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>";
var spans = $(text).filter('span');
console.log(spans.length); // 2

デモ: http://jsfiddle.net/ambiguous/TGY3J/

またはそれをラップして<div>使用しますfind

var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>";
var spans = $('<div>' + text + '</div>').find('span');
console.log(spans.length); // 2

デモ: http://jsfiddle.net/ambiguous/qbCjk/

find子孫で動作し<div>ますが、ラッパーがないと、子孫が$(text)ありません<span>。HTML を でラップするの<div>がおそらく最善の策です。そうすれば、目的の要素の深さを気にする必要がなくなります。

于 2011-11-07T02:38:56.860 に答える