9

我扩展了 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);
4

2 回答 2

10

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

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

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

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

于 2013-03-27T15:36:25.997 回答
5

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

例如,如果选择器选择了多个元素,则您拥有的版本将简单地返回第一个元素的 html 内容。

所以我想说的是,这toString并不像你想象的那么简单,我也想不出有什么好的用途toString

于 2013-03-27T15:25:26.720 回答