Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTML5数据值属性的最佳位置?_Html - Fatal编程技术网

HTML5数据值属性的最佳位置?

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">

我有以下HTML:

<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上的数据值。也许我遗漏了什么?罗布,谢谢你周到的回答。你的论点很有力,例子也很好。罗布,谢谢你深思熟虑的回答。你的论点很有力,例子也很好。