jQuery对象`toString()`方法

时间:2013-03-27 15:20:54

标签: javascript jquery

我扩展了jQuery对象以返回它的内部HTML ...

$.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);

2 个答案:

答案 0 :(得分:9)

Object.toString 返回表示对象的字符串(来自文档)。

在谈论jQuery对象时,Object.toString的预期返回值为"[object Object]"

让它返回HTML只会是糟糕的设计,并且可能会破坏内容。

另外,根据我们想要从jQuery对象中检索的内容,使用不同的显式方法是有意义的:HTML .html(),剥离标记.text()

答案 1 :(得分:5)

嗯,jQuery对象不仅仅是.html的主页。如果jQuery必须实现toString,它应该足够通用,可以基于jQuery对象中的选择器返回。

例如,如果选择器选择了多个元素,那么您拥有的版本只会返回第一个元素html内容。

所以我想说的是toString并不像你想象的那么简单,我也想不出toString的任何好用法。