我认为问题与@Les 和@Kobi 制作的cmets 有关,因为您正在向HTML 中的元素添加属性而没有定义额外的命名空间。由于它们没有在根命名空间中定义,浏览器可能会忽略它们。
第一个解决方案是将附加属性命名空间并将 doctype 设置为某种类型的 XHTML,这应该可以解决大多数浏览器中的问题。以下是您将如何执行此操作:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:myNS="http://uri.for.your.schema" xml:lang="en" lang="en">
<!---more html---->
<a myNS:amount="someAmount" ><!-----></a>
<!---more html--->
</html>
对于 quirksmode 和浏览器解析文档(尤其是 IE)时可能发生的各种其他奇怪的事情,您可能需要考虑另一种解决问题的方法。与其将数据作为属性存储在 HTML 中,不如使用 jQuery data() 函数来存储 jQuery 中元素的 amount 数据键,然后检索排序的值。
// Store a value
$.data(theElement, 'amount', value);
// Retrieve the value in your sort
function(a, b)
{
return parseInt($.data(b, 'amount')) - parseInt($.data(a, 'amount'));
}
我保留了parseInt 电话,因为我不确定您会将金额存储为哪种数据类型。我不确定您是在服务器上还是在客户端上生成这些amount 属性,因此第二种解决方案可能不适合您。您始终可以在存储值的服务器上生成 JSON 字符串,并将其作为对象嵌入到脚本标记中的文档中。然后您可以访问这些值并将它们引用到客户端上的 jQuery 中的对象。
编辑:关于我的 doctype 和命名空间的回答,需要意识到的重要一点是 HTML/XHTML 和 DOM 之间存在差异。 jQuery 的优点之一是它使这种差异变得不那么麻烦,但理解存在差异仍然很重要。 jQuery 处理 DOM,它是由浏览器从解析的文档中创建的。快速查看quiksmode 会告诉您,根据文档的文档类型和浏览器解析它的模式,可能会发生各种奇怪的事情。我的直觉是,这是其中之一。使用自定义属性扩展 XHTML(因此 XHTML 中的 X)并没有错,例如 Adobe 的 spry 框架有趣地使用 XHTML 源代码中的自定义属性来定义要在加载 DOM 后创建的自定义小部件和区域。但是,与 Web 开发中的所有内容一样,您必须按照标准进行编码,否则您将其留给浏览器来尝试找出您要做什么,并且有时(通常在 IE 的情况下)会出错。