单击li元素后如何切换ul的id?

时间:2016-05-27 15:53:49

标签: javascript jquery

我想在点击li元素后动态更改ul元素的id。然后我将此id作为字符串传递给str变量。例如,当我点击驱动程序2的ul更改为"?driver_id = 2",

我有这样的事情:

<ul class="drivers" id="">
     <li><a href="" id="?driver_id=1">Driver 1</a></li>
     <li><a href="" id="?driver_id=2">Driver 2</a></li>
     <li><a href="" id="?driver_id=3">Driver 3</a></li>
 </ul>

和jquery:

var str=$('ul.drivers').attr('id');

3 个答案:

答案 0 :(得分:1)

正如一些评论所提到的,这不是一个好主意。 id属性应该是唯一的,因此通过将ul的ID设置为其中一个li的ID,您将在页面上创建两个ID,这将掩盖其中一个,如果你再次尝试搜索它。

但如果您尝试使用jquery更改属性,请使用attr的第二个参数来设置attrib

$('ul.drivers').attr('id', value)

如果您想使用class而不是id,请使用jquerys addClass方法。

$('ul.drivers').addClass(value)

虽然我建议使用自定义数据属性

$('ul.drivers').data('some-name', value) //=> set value
$('ul.drivers').data('some-name') //=> get value

答案 1 :(得分:1)

使用id属性并不是一个好主意,因为它们必须是唯一的,并且不应该在整个DOM中进行更改。

相反,data属性似乎更好用。您可以设置属性,并使用以下内容访问其值:

HTML

<ul class="drivers" id="list">
   <li><a href="#" data-driver="?driver_id=1">Driver 1</a></li>
   <li><a href="#" data-driver="?driver_id=2">Driver 2</a></li>
   <li><a href="#" data-driver="?driver_id=3">Driver 3</a></li>
</ul>

JavaScript

$(document).ready(function() {
  $('#list li a').on('click',function() {
    var str = $(this).data('driver');
    console.log(str);
  })
})

这是一个JS小提琴示例:https://jsfiddle.net/igor_9000/wh3v1wsk/

希望有所帮助!

答案 2 :(得分:0)

不是更改id,而是创建一个数据属性,如下所示:

<ul class="drivers" id="driverlist-1" data-active-driver-id="">
  <li><a href="" id="?driver_id=1">Driver 1</a></li>
  <li><a href="" id="?driver_id=2">Driver 2</a></li>
  <li><a href="" id="?driver_id=3">Driver 3</a></li>
</ul>

<ul class="drivers" id="driverlist-2" data-active-driver-id="">
  <li><a href="" id="?driver_id=4>Driver 4</a></li>
  <li><a href="" id="?driver_id=5">Driver 5</a></li>
  <li><a href="" id="?driver_id=6">Driver 6</a></li>
</ul>

数据属性旨在存储您出于任何原因需要控制的数据。请参阅this link

然后你这样更改它,用你的id访问你的ul,因为想想,如果你有两个uls,每个都有自己的驱动程序,你保证正确的那个将是改变:

$('#driverlist-1').data('active-driver-id', value); // setting some value to it
var str = $('#driverlist-1').data('active-driver-id'); // getting stored value

其中value是所点击的li的ID。即使你没有两个名单,我也建议你这样做,只是为了保持良好的做法。