Jquery attr返回0而不是值

4

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

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

这个jQuery脚本如下:
alert($("li").attr("value"));

它应该返回test,但它返回0,为什么会这样发生?
4个回答

6
如果您想返回li标签内的文本,则需执行以下操作:
alert($("li").text());​

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

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

li标签中的'value'属性只能是数字! - Kirill Ivlev
@kir - 这是一些有价值的信息!你有这个限制的参考资料吗? - Lix
嗯...w3schools...:/ 更好的信息来源应该是-https://developer.mozilla.org/en-US/docs/HTML/Element/li。但还是谢谢你提供的信息! - Lix

1
基本上,您的选择器正在捕获您拥有的每个li元素。您可能希望使您的选择器更具体。对于第一个<li>,您可以使用 -
$('li:first').attr('value');

使用id属性也是不错的选择。

还有一件需要注意的事情是,您正在尝试提取名为value的属性值,而不是元素内实际的文本内容。如果您想要属性值,那么您已经在正确的轨道上了。如果您想要内容,则可以尝试使用text()html()

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

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

1

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

您可能希望考虑将此数据存储在其他位置。也许使用data-*属性。

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

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

1
如果你要获取值,li标签中的value属性只能是数字。否则你会一直得到0。
你可以使用index代替value,就像下面这样:
.attr("value", function (currentValue, index) { return index } )

在哪里

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接