Jquery attr返回0而不是值

时间:2012-11-11 13:31:04

标签: jquery

所以我有一个非常简单的HTML:

​<ul>
    <li value="test">test</li>
</ul>​​​​​​​​​​​​​​​​​​​​​​​

这个jquery脚本

alert($("li").attr("value"));

它应该返回test但它返回0,为什么会发生这种情况?

4 个答案:

答案 0 :(得分:6)

如果要在li标签内返回文本,请:

alert($("li").text());​

您不能使用'value'属性(li标签中的'value'属性只能是数字)。将其重命名为数据值:

alert($("li").attr("data-value"));​

答案 1 :(得分:1)

Bassically你的选择器捕获你拥有的每个li元素。您可能希望使您的选择器更具体。对于您可以使用的第一个<li> -

$('li:first').attr('value');

使用id属性也会很好。

此处需要注意的另一件事是,您尝试提取名为value的属性的值,而不是元素中的实际文本内容。如果您想要属性值,那么您就在正确的轨道上。如果您想要使用text()html()尝试的内容。

如果您要处理多个元素,可能需要考虑使用$.each函数。

var liValues = [];
$.each('li',function(index,value){
  liValues.push(value.attr('value'));
});

答案 2 :(得分:1)

似乎这不起作用,因为value根本不是li元素的有效属性。正如您所看到的this example将属性名称更改为rel会使您的代码生效(尽管我认为rel无效也不...奇怪)。

您可能需要考虑将这些数据存储在其他位置。也许使用data-*属性。

​<ul>
    <li data-value="test">test</li>
</ul>​​​​​​​​​​​​​​​​​​​​​​​

alert($("li").data("value"));

答案 3 :(得分:1)

如果您要获取值,则 value 标记中的 li 属性只能是数字。否则你将永远得到 0.
您可以使用索引代替值。如下图:

.attr("value", function (currentValue, index) { return index } )

哪里

  • currentValue 是当前元素的值。
  • index 是当前元素的数组索引。