1

次のコードがあります

var page = '<h1>Hello!</h1><p>FOO</p><span class="username">this is ur name</span><p>sample text</p>';

アラートを$(page).html()出すと、Hello! が表示されます。ページのコンテンツを div とアラートでラップすると、$(page).html()html コンテンツ全体が取得されます。

ここで達成しようとしているのは、html テンプレートを含むページ文字列があり、その中のクラスを見つけようとしてusernameいて、null.

私はこれが起こると混乱しています

ここに問題の小さなフィドルがあります

http://jsfiddle.net/6TSuq/1/

4

2 に答える 2

5

呼び出す$(page)と、4 つの要素を含む jQuery オブジェクトを作成します。文字列にネストされていない HTMLElements ごとに。

console.log($(page).map(function () {
   return this.nodeName;  
}).toArray());

// ["H1", "P", "SPAN", "P"] 

この jQuery オブジェクトの最初の要素html()の を返し ます。そのため、「Hello!」しか表示されません。innerHTML

を見つけるには、メソッド.usernameを使用する必要があります。このfilter()メソッドは、指定されたセレクターに一致する要素を jQuery オブジェクト内で検索します。

alert($(page).filter('.username').text()); // "this is ur name", kthx.

ここで更新されたフィドルを参照してください。http://jsfiddle.net/6TSuq/15/

将来的には、このような要素をネストする可能性があることに注意してください。

var page = "<h1><span class='username'>Foo</span></h1>";

この状況では、filter()ing for .usernamewill は何の結果ももたらしません。jQuery オブジェクトには要素$(page)が含まれていないため。.usernameが含まれてh1おり、その子孫は.usernameです。したがって、ここでは使用する必要があります。

alert($(page).find('.username').text());

参照についてはfind()filter()および を参照してください。map()

于 2012-09-05T15:19:07.407 に答える
1

これを行う非常に簡単な方法は次のとおりです。

var elem = $('<h1>Hello!</h1><p>FOO</p><span class="username">this is ur name</span><p>sample text</p>').filter('.username').get(0);
console.log($(elem).html()); // returns this is ur name

jsFiddle の例

jQuery メソッドを使用するには、まず文字列を jQuery オブジェクトに変換する必要があります。

于 2012-09-05T15:28:34.180 に答える