9

内部HTMLを返すようにjQueryオブジェクトを拡張しました...

$.fn.toString = function() {
  return this.html();
};

console.log("The inner HTML is: " + $("<div>Here, <i>there</i>, everywhere</div>"));

これがデフォルトの動作ではない理由はありますか? これは何かを壊しますか?


回答/コメントに応答するように更新

まず、jQuery オブジェクトを文字列に強制し、その文字列内のテキストを一致させることに依存する型チェックを除いて、それがどのように壊れるかはわかりません。私はこれについて間違っていますか?

outerHTMLこれは、連結されたセット内のすべての要素の を返します。これは他の人にとって意味がありますか?私にとって、それはかなり理にかなっています。

var li, list;

$.fn.toString = function() {
  var out;
  out = [];
  $.each(this, function(k, v) {
    return out.push($(v)[0].outerHTML);
  });
  return out.join("\n");
};

list = $("<ul>\n  <li>some <a href='/'>link</a> items</li>\n  <li>some <a href='/'>link</a> items</li>\n  <li>some <a href='/'>link</a> items</li>\n  <li>some <a href='/'>link</a> items</li>\n  <li>some <a href='/'>link</a> items</li>\n</ul>");

li = $("li", list);

console.log("The html of it..: " + li);
4

2 に答える 2

10

Object.toString (ドキュメントから)オブジェクトを表す文字列を返します。

jQuery オブジェクトについて話すとき、期待される戻り値はObject.toStringです"[object Object]"

HTML を返すようにすると、単純に設計が悪くなり、問題が発生する可能性があります。

.html()さらに、jQuery オブジェクトから取得したいもの(HTML.text()用、タグの削除用)に応じて、異なる明示的なメソッドを用意することは理にかなっています。

于 2013-03-27T15:36:25.997 に答える
5

まあ、jQuery オブジェクトは単なるホームではありません.html。jQuery が を実装するtoString必要がある場合、jQuery オブジェクトのセレクターに基づいて返すのに十分な汎用性を持つ必要があります。

たとえば、セレクターが複数の要素を選択した場合、使用しているバージョンは単純に最初の要素の html コンテンツを返します。

だから私が言おうとしているのは、toStringはあなたが思っているほど単純ではなく、 の素晴らしい使い方も思いつかなかったということtoStringです。

于 2013-03-27T15:25:26.720 に答える