2011-01-11 52 views
3

我试图通过jQuery中的.attr();函数为某些页面元素创建一些自定义属性,以使选择更容易。jQuery:如何将有用的信息添加到我的页面元素?

我认为这可能是不鼓励的,因为在jQuery和javaScript中有很大的灵活性,作为新手,我还没有学会充分利用它的潜力。

除了制作神秘的ID或添加大量的类以外,还有哪些方法可以将更多信息添加到我的div和其他页面元素,以便通过选择器$()轻松选择?

我基本上对利弊感兴趣,以及基于不同方法产生的内存问题或速度问题。

回答

5

在您的元素上创建自定义属性都没有问题。无论如何,你应该遵循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]') 

你的元素运行一个选择。

编号:.data()html5 data attributes

+0

这是否会导致XHTML严格不验证?我并不打算将此作为解决方案;我只是好奇。 – Andy 2011-01-11 16:27:32

+0

请原谅,但如何选择具有匹配数据信息属性的所有元素? – sova 2011-01-11 16:28:18

+0

@nalroff:它可能会失败HTML4验证。但是,严肃地说,谁真正关心这种情况。 – jAndy 2011-01-11 16:28:45

2

HTML5引入data-* attributes。所以如果你要引入自定义属性,我至少会坚持这个规范。

jQuery中还有.data()方法用于将任意数据与元素相关联。只要你不需要在选择器中使用数据,这是首选的方法。

1

的jQuery插件通常使用一些已经存在的属性,如“相对”或“标题”,但jQuery的也有.data()方法存储在JavaScript中对特定对象的信息。它就像一个日志。

http://api.jquery.com/jQuery.data/

的这个技术均是可以接受的和工作得很好。

1

首先要注意的是, jQuery selectors分别是极其强大。您并不总是需要通过ID或班级进行选择 - 您可以通过标签,按类型,与其他选择(孩子/父母/兄弟姐妹/等)的关系进行选择。因此,可能不需要为各种元素添加ID或类以选择它们。

这样说,不要避免类和ID只是为了避免类和ID。他们的存在是有原因的,而这个原因是为了让他们选择简单易懂的(不管是用jQuery还是CSS还是其他的)。如果你删除类和ID,你可能会让你的HTML看起来更好,但是你的jQuery代码可能会变得复杂和/或效率非常低。 (例如,选择一个ID的速度总是比选择一个父组件的速度快,并找到它的孩子。)

0

唯一ID是通过jQuery查找元素的最快方法,所以如果您的诱惑的目的是为了让你的元素更容易jQuery检索,这似乎毫无意义。

我已经使用这样的技术来添加属性,如标题或替代品,以获得更好的可访问性。

1

我不认为你应该气馁使用attr()。这是一个强大的工具,真的有助于为您的元素添加更多信息。我有一些使用它来支持内部JavaScript框架的项目,它使我的代码变得清晰易读。它的好处是可以轻松地与选择器一起工作!

0

使用.data('key', 'val')来设置您的数据和.data('key')来读取它。

相关问题