4

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

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

而这个 jquery 脚本

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

它应该返回test,但它返回 0,为什么会这样?

4

4 回答 4

6

如果要返回 li 标签内的文本,则:

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

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

alert($("li").attr("data-value"));​
于 2012-11-11T13:32:35.263 回答
1

基本上,您的选择器正在捕获li您拥有的每个元素。您可能希望使您的选择器更具体。首先<li>你可以使用 -

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

使用id属性也很好。

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

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

var liValues = [];
$.each('li',function(index,value){
  liValues.push(value.attr('value'));
});
于 2012-11-11T13:32:30.550 回答
1

似乎这不起作用,因为它根本不是元素value的有效属性。li正如您在此示例中看到的那样,更改属性的名称以rel使您的代码正常工作(尽管我认为这也不rel是有效的......奇怪)。

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

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

alert($("li").data("value"));
于 2012-11-11T13:38:30.520 回答
1

如果要获取值,value则标签中的属性li只能是数字。否则,您将始终得到 0。
您可以使用 index 来代替 value。如下所示:

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

在哪里

  • currentValue是当前元素的值。
  • index是当前元素的数组索引。
于 2020-12-27T11:28:45.027 回答