jQuery 1.3.2中是否有JQuery(..)。html()buggy?

时间:2009-08-31 11:41:55

标签: jquery

此处的代码不会返回预期的内容:

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。

2 个答案:

答案 0 :(得分:11)

  

.replace背后的动机是什么?

隐藏jQuery用于内部目的的属性。

  像这样的代码让我想知道我是否应该在生产中使用jQuery。

是的,我有完全相同的反应。这真是令人难以置信的草率。尝试用regexp处理HTML是你期望从第一次问题海报中得到的天真的黑客,而不是你希望在框架中看到的那种行为,这么多SO用户似乎都崇拜。

通过尝试用正则表达式解析标记,这不是jQuery跳起来的唯一地方;一些选择器的东西也被破坏了。这些可能是不起眼的角落情况,但对我来说这是一个巨大的红旗,表明错误的方法。

答案 1 :(得分:4)

此代码是1.3.2中的新代码,不在1.3.1中。在我看来,jQuery使用名称以“jQuery”开头的属性来存储元素上的数据,这是当你要求html返回时不暴露给你的方式。

这显然不是一个错误。作者打算在返回字符串之前删除该HTML。

这会影响您的代码吗?与任何库一样,您应该在部署之前彻底测试您的生产代码。