我试图通过jQuery中的.attr();
函数为某些页面元素创建一些自定义属性,以使选择更容易。jQuery:如何将有用的信息添加到我的页面元素?
我认为这可能是不鼓励的,因为在jQuery和javaScript中有很大的灵活性,作为新手,我还没有学会充分利用它的潜力。
除了制作神秘的ID或添加大量的类以外,还有哪些方法可以将更多信息添加到我的div和其他页面元素,以便通过选择器$()
轻松选择?
我基本上对利弊感兴趣,以及基于不同方法产生的内存问题或速度问题。
我试图通过jQuery中的.attr();
函数为某些页面元素创建一些自定义属性,以使选择更容易。jQuery:如何将有用的信息添加到我的页面元素?
我认为这可能是不鼓励的,因为在jQuery和javaScript中有很大的灵活性,作为新手,我还没有学会充分利用它的潜力。
除了制作神秘的ID或添加大量的类以外,还有哪些方法可以将更多信息添加到我的div和其他页面元素,以便通过选择器$()
轻松选择?
我基本上对利弊感兴趣,以及基于不同方法产生的内存问题或速度问题。
在您的元素上创建自定义属性都没有问题。无论如何,你应该遵循html5 data-
规范。
<div id="foo" data-info="hello" data-more="{'iam': 'anobject'}" />
关于使用这个很酷的事情是,jQuery的(最新版本)会自动解析data-x
属性,并增加了那些进入.data()
的expando。
$('#foo').data('info') === 'hello'
$('#foo').data('more').iam === 'anobject'
你仍然能够像
$('div[data-info=hello]')
你的元素运行一个选择。
HTML5引入data-*
attributes。所以如果你要引入自定义属性,我至少会坚持这个规范。
jQuery中还有.data()
方法用于将任意数据与元素相关联。只要你不需要在选择器中使用数据,这是首选的方法。
的jQuery插件通常使用一些已经存在的属性,如“相对”或“标题”,但jQuery的也有.data()
方法存储在JavaScript中对特定对象的信息。它就像一个日志。
http://api.jquery.com/jQuery.data/
的这个技术均是可以接受的和工作得很好。
你真的应该只使用类和ID初始选择,但在这里,你可以在此之上使用一些方便的选择:
首先要注意的是, jQuery selectors分别是极其强大。您并不总是需要通过ID或班级进行选择 - 您可以通过标签,按类型,与其他选择(孩子/父母/兄弟姐妹/等)的关系进行选择。因此,可能不需要为各种元素添加ID或类以选择它们。
这样说,不要避免类和ID只是为了避免类和ID。他们的存在是有原因的,而这个原因是为了让他们选择简单易懂的(不管是用jQuery还是CSS还是其他的)。如果你删除类和ID,你可能会让你的HTML看起来更好,但是你的jQuery代码可能会变得复杂和/或效率非常低。 (例如,选择一个ID的速度总是比选择一个父组件的速度快,并找到它的孩子。)
唯一ID是通过jQuery查找元素的最快方法,所以如果您的诱惑的目的是为了让你的元素更容易jQuery检索,这似乎毫无意义。
我已经使用这样的技术来添加属性,如标题或替代品,以获得更好的可访问性。
我不认为你应该气馁使用attr()。这是一个强大的工具,真的有助于为您的元素添加更多信息。我有一些使用它来支持内部JavaScript框架的项目,它使我的代码变得清晰易读。它的好处是可以轻松地与选择器一起工作!
使用.data('key', 'val')
来设置您的数据和.data('key')
来读取它。
我肯定会使用数据API(http://api.jquery.com/jQuery.data/)
这是否会导致XHTML严格不验证?我并不打算将此作为解决方案;我只是好奇。 – Andy 2011-01-11 16:27:32
请原谅,但如何选择具有匹配数据信息属性的所有元素? – sova 2011-01-11 16:28:18
@nalroff:它可能会失败HTML4验证。但是,严肃地说,谁真正关心这种情况。 – jAndy 2011-01-11 16:28:45