如何防止jQuery.html()自动转义href属性?

如何防止jQuery.html()自动转义href属性?,jquery,templates,Jquery,Templates,更新:正如TimWolla评论的那样,这似乎是一种特定于浏览器的行为-我应该如何以跨浏览器的方式可靠地将其规范化为未经scape的版本 HTML: 下面是一个示例:如果您打算通过JavaScript对元素执行扩展,您可以将“href”模板放在一个单独的属性中 <a href='#dummy' data-href='#{template}'>Hi</a> 然后从数据属性展开,将结果放到真正的“href”中。首先,我怀疑你的问题是否有可靠的解决方案。根本原因很简单:因为

更新:正如TimWolla评论的那样,这似乎是一种特定于浏览器的行为-我应该如何以跨浏览器的方式可靠地将其规范化为未经scape的版本

HTML:


下面是一个示例:

如果您打算通过JavaScript对元素执行扩展,您可以将“href”模板放在一个单独的属性中

<a href='#dummy' data-href='#{template}'>Hi</a>


然后从数据属性展开,将结果放到真正的“href”中。首先,我怀疑你的问题是否有可靠的解决方案。根本原因很简单:因为在下面工作的
元素.innerHTML
是非标准的,它完全取决于浏览器的实现


如果您想要一个可靠的解决方案,我建议您使用DOM操作而不是模板。

这似乎是一个特定于浏览器的问题。在谷歌的v8引擎中,它工作得很好。那个锚似乎是一个模板。为什么要将模板解析为DOM?模板应该保存在源代码中(例如,在脚本元素中),并使用JavaScript进行处理(然后才由浏览器解析)!更新了问题……西姆·维达斯:因为模板本身是动态的。相同的部分用于在服务器端呈现一些静态页面,以及由js模板化。我使用的是Rails 3.2,使用“.js.coffee.erb”并不能解决这个问题,因为js文件无法访问
render
。我必须演示我的答案。Firefox不会处理其他属性的值,只处理“href”(可能还有“src”和其他类似URL的东西),但这种转义只在“href”属性上完成。其他属性不会受到同样的影响。@Pointy我打赌某些浏览器(如Firefox)会转义它,因为
href
应该包含URL。因此,不允许出现在其中的字符将被转义。但是,正如我所说,它是特定于浏览器的,我们没有任何标准来保证它的行为。是的,但我尝试过的浏览器都没有逃过“data href”属性。毕竟,模板保存在元素上的什么位置并不重要。当然,属性值中的HTML元字符总是会有问题,但对于简单的模板,它应该可以工作。听起来是个不错的主意,但不幸的是,在我的情况下,它没有那么好,因为对于一些静态页面,在服务器端共享相同的模板,并且在服务器逻辑中复制js行为似乎很尴尬。啊,对了,我懂了。那么,除了
unescape()
之外,可能没有什么好的解决方法。
$('#test').html()
=> <a href="#%7Bone%7D">#{two}</a>
unescape($('#test').html())
=> <a href="#{one}">#{two}</a>
<a href='#dummy' data-href='#{template}'>Hi</a>