此处的代码不会返回预期的内容:
jQuery('<div>Look here: [ jQuery0="null" ]</div>').html()
相反,你得到:
Look here: [ ]
有问题的jQuery源代码:
html: function( value ) {
return value === undefined ?
(this[0] ?
this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
null) :
this.empty().append( value );
},
.replace
背后的动机是什么?我没有时间讨论jQuery的其余部分,但这样的代码让我想知道我是否应该在生产中使用jQuery。
答案 0 :(得分:11)
.replace背后的动机是什么?
隐藏jQuery用于内部目的的属性。
像这样的代码让我想知道我是否应该在生产中使用jQuery。
是的,我有完全相同的反应。这真是令人难以置信的草率。尝试用regexp处理HTML是你期望从第一次问题海报中得到的天真的黑客,而不是你希望在框架中看到的那种行为,这么多SO用户似乎都崇拜。
通过尝试用正则表达式解析标记,这不是jQuery跳起来的唯一地方;一些选择器的东西也被破坏了。这些可能是不起眼的角落情况,但对我来说这是一个巨大的红旗,表明错误的方法。
答案 1 :(得分:4)
此代码是1.3.2中的新代码,不在1.3.1中。在我看来,jQuery使用名称以“jQuery”开头的属性来存储元素上的数据,这是当你要求html返回时不暴露给你的方式。
这显然不是一个错误。作者打算在返回字符串之前删除该HTML。
这会影响您的代码吗?与任何库一样,您应该在部署之前彻底测试您的生产代码。