HTML5数据值属性的最佳位置?
我有以下HTML:HTML5数据值属性的最佳位置?,html,Html,我有以下HTML: <ul class='dropSelect'> <li data-value="one"> <span>Menu1</span> </li> <li data-value="two"> <span>Menu2</span> </li> <li data-value="three">
<ul class='dropSelect'>
<li data-value="one">
<span>Menu1</span>
</li>
<li data-value="two">
<span>Menu2</span>
</li>
<li data-value="three">
<span>Menu3</span>
</li>
</ul>
我的问题是:将数据值属性放置在实际菜单项文本旁边的跨度上是更好的做法,还是像我所做的那样放置在父li元素上?该属性将从web服务接收数据,我使用一些js获取该属性的值,并将其放置在页面上的另一个元素中
SOF在发布此问题时警告我,这可能太主观了。。。可能是。。。但是,我关心的是理解这个属性的放置可能会对UI工程、javascript DOM操作、可访问性等产生什么影响(如果有的话)。尽管html5数据属性是主观的,并且可以在任何时间/任何地点使用,但我假设您正在根据自己的情况查找这些元素。在你的情况下,出于几个原因,我会把它们放在和你一样的地方 这是顶级子级,因此很容易通过数据属性获取它们。 $'li[数据值]' 在某些情况下,您可能会在每个元素中包含更多元素,现在它可能只是一个元素,但是通过让列表项保存数据值,您可以轻松地在其中获取其他DOM元素。如果它在范围内,则必须上升一级到列表项,然后找到所需的任何元素 如果span保留数据值: $'[data value=whatever]'。最近的'li'。查找'.someOtherThing' 相反,现在你不必为父母做毫无意义的查找
$'[data value=whatever]'。查找'.someOtherThing' 尽管html5数据属性是主观的,并且可以在任何时间/任何地点使用,但我假设您正在根据自己的情况查找这些元素。在你的情况下,出于几个原因,我会把它们放在和你一样的地方 这是顶级子级,因此很容易通过数据属性获取它们。 $'li[数据值]' 在某些情况下,您可能会在每个元素中包含更多元素,现在它可能只是一个元素,但是通过让列表项保存数据值,您可以轻松地在其中获取其他DOM元素。如果它在范围内,则必须上升一级到列表项,然后找到所需的任何元素 如果span保留数据值: $'[data value=whatever]'。最近的'li'。查找'.someOtherThing' 相反,现在你不必为父母做毫无意义的查找
$'[data value=whatever]'。查找'.someOtherThing' 我想说的是将数据值放在清单中的span中。我认为最好将数据属性放在最接近它所影响的字符串的位置,在本例中是跨度 另一方面,这段jQuery工作得很好:
$(document).ready( function() {
$("li").click(function(){
var txt = $(this).text();
$("#mydiv").text(txt);
});
});
有了这个,我在JSFIDLE中进行了测试http://jsfiddle.net/YqePE/ 点击一个li,可以返回它的文本值,因此它也会返回该li中的任何数据属性
但是,如果通过某种奇怪的CSS组合,这可能会产生不受欢迎的结果,当你认为你没有点击某个LI时,浏览器认为你点击了。为了防止出现这种情况,您需要使span保存data属性。我要说的是将span中的数据值放在列表中。我认为最好将数据属性放在最接近它所影响的字符串的位置,在本例中是跨度 另一方面,这段jQuery工作得很好:
$(document).ready( function() {
$("li").click(function(){
var txt = $(this).text();
$("#mydiv").text(txt);
});
});
有了这个,我在JSFIDLE中进行了测试http://jsfiddle.net/YqePE/ 点击一个li,可以返回它的文本值,因此它也会返回该li中的任何数据属性
但是,如果通过某种奇怪的CSS组合,这可能会产生不受欢迎的结果,当你认为你没有点击某个LI时,浏览器认为你点击了。为了防止出现这种情况,您可能希望让span保存data属性。看起来像是您正在尝试做的事情。您可以使用jQuery的。是的,我知道它没有被标记为jQuery
$('ul.dropSelect > li').each(function(){
var i = $(this).index();
});
从你看起来想要做的事情。您可以使用jQuery的。是的,我知道它没有被标记为jQuery
$('ul.dropSelect > li').each(function(){
var i = $(this).index();
});
广义地说,我建议将数据存储在与数据的“父”或“所有者”最接近的元素上。这都是关于什么传达了最重要的意义 例如,如果您在html中表示“人”的列表
<ul>
<li class="person">Tim Bresnan</li>
<li class="person">Joe Root</li>
</ul>
但是,如果您对一个人的html表示更为复杂,可以说
<ul>
<li class="person">
<div class="name">Tim Bresnan</div>
<div class="dob">28th Feb 1985</div>
</li>
<li class="person">
<div class="name">Joe Root</div>
<div class="dob">30th Dec 1990</div>
</li>
</ul>
广义地说,我建议将数据存储在与数据的“父”或“所有者”最接近的元素上。这都是关于什么传达了最重要的意义 例如,如果您在html中表示“人”的列表
<ul>
<li class="person">Tim Bresnan</li>
<li class="person">Joe Root</li>
</ul>
但是,如果您对一个人的html表示更为复杂,可以说
<ul>
<li class="person">
<div class="name">Tim Bresnan</div>
<div class="dob">28th Feb 1985</div>
</li>
<li class="person">
<div class="name">Joe Root</div>
<div class="dob">30th Dec 1990</div>
</li>
</ul>
此信息不需要使用数据属性 尝试使用CSS或jQuery的伪类选择器绑定指定项: CSS: 或jQuery:
// Second <li>
$('.dropSelect li').eq(1)
演示:无需
使用此信息的“数据”属性
尝试使用CSS或jQuery的伪类选择器绑定指定项:
CSS:
或jQuery:
// Second <li>
$('.dropSelect li').eq(1)
演示:数据值没有最佳位置,因为它可以随用于访问该值的代码而变化。这里没有足够的上下文。但有一个问题,为什么要在li元素中设置一个跨度?这是不必要的。@JeremyJStarcher,也许他想将li与跨度分开设置样式。此值可以通过$'selector'获得。eqindexhackNightly是正确的:我需要在li中设置跨度,以实现我的样式设置的特定结果。数据值没有最佳位置,因为它可能随用于访问该值的代码而变化。这里没有足够的上下文。但有一个问题,为什么要在li元素中设置一个跨度?这是不必要的。@JeremyJStarcher,也许他想将li与跨度分开设置样式。这个值可以通过$'selector'获得。eqindexhackNightly是正确的:我需要li中的跨度来实现我的样式设置的特定结果。我相信我的一个标记确实是jquery,但即使它不是,我仍然感谢你的贡献!我相信我的一个标签确实是jquery,但即使不是,我仍然感谢您的贡献!感谢您的回复;我查看了你的小提琴,它与我开始使用的类似,但我需要一些额外的js来获取li上的数据值。也许我遗漏了什么?谢谢你的回复;我查看了你的小提琴,它与我开始使用的类似,但我需要一些额外的js来获取li上的数据值。也许我遗漏了什么?罗布,谢谢你周到的回答。你的论点很有力,例子也很好。罗布,谢谢你深思熟虑的回答。你的论点很有力,例子也很好。