Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
Jquery 如何从li元素获取id?_Jquery - Fatal编程技术网

Jquery 如何从li元素获取id?

Jquery 如何从li元素获取id?,jquery,Jquery,我尝试使用jquery将.live()li元素的值作为以下代码: $("body").on("click", "#nav li:has(ul)", function (event) { if (this == event.target) { $(this).toggleClass('clicked').children('ul').slideToggle(); $(this).find('li:has(ul)').removeClass('clicked').fin

我尝试使用jquery将.live()li元素的值作为以下代码:

$("body").on("click", "#nav li:has(ul)", function (event) {
   if (this == event.target) {
      $(this).toggleClass('clicked').children('ul').slideToggle();
      $(this).find('li:has(ul)').removeClass('clicked').find("ul").slideUp();
      $(this).siblings().removeClass('clicked').find("ul").slideUp();
   }
})

$("#content").load("content.html");
content.html
中,我放置了如下代码:

   <ul id="nav">
       <li value='2012'>2012
         <ul>
             <li value='Geography'>Geography</li>
             <li value='Topography'>Topography</li>
             <li value='Geological'>Geological</li>
             <li value='Seismology'>Seismology</li>
             <li value='Volcanology'>Volcanology</li>
             <li value='Oceanography'>Oceanography</li>
             <li value='Hydrogeology'>Hydrogeology</li>
             <li value='Meteorology'>Meteorology</li>
             <li value='Demography'>Demography</li>
         </ul>
       </li>
   </ul>
  • 2012
    • 地理
    • 地形
    • 地质
    • 地震学 火山学
    • 海洋学
    • 水文地质学
    • 气象学
    • 人口学
因此,当我单击li元素时,
alert($('li').attr('value')

如何获取其值?

您应该使用
.val()
返回值,使用
.html()
返回html。

在事件侦听器中,向事件侦听器添加额外的
else
条件

除非阻止,否则事件将始终在点击
#nav li:has(ul)
元素(其后代)时触发。检查
事件。目标
元素是否指向
  • $("body").on("click", "#nav li:has(ul)", function (event) {
       var $target = $(event.target);
       if (this == event.target) {
          $target.toggleClass('clicked').children('ul').slideToggle()
          $target.find('li:has(ul)').removeClass('clicked').find("ul").slideUp()
          $target.siblings().removeClass('clicked').find("ul").slideUp();
       } else if ($.nodeName(event.target, 'li')) {
           // LI element, not the root li
           var val = $target.attr('value');
       }
    });
    
    此代码假定单击的
  • 元素没有任何其他子体(即:纯文本)。如果有,则还必须遍历树

    与其添加非标准的
    属性,我建议使用
    数据
    -属性,例如:

    <li data-value='Geological'>Geological</li>
    

    不是答案,只是一种改进。与其多次执行
    $(此)
    ,不如执行
    var elem=$(此);
    并多次使用
    elem
    li
    元素中的
    属性已被弃用。我不知道
    。on
    .one
    。off
    已弃用
    。live
    .bind
    、和
    。delegate
    。你动摇了我的世界。我尝试了你的代码,但它返回了error…重新运行值是
    0
    @JinSun jQuery在
    属性上似乎失败了。用
    数据值替换
    解决了问题:它可以工作,但复制了值…当我点击
    2012
    时,它是可以的。但是当我点击
    地理
    时,它会出现两个
    地理地理
    和所以on@JinSun正如我所说:将
    event.stopPropagation();
    放在
    $(“body”)之后。在(“click”、“#nav li:has(ul)”上,函数(event){
    @JinSun
    .find()
    搜索所有子体。使用
    .children()
    代替
    .find()
    如果只想获取子元素,请添加
    :first
    选择器,或在
    之后使用
    .first()
    。find()
    .children()
    仅获取第一个元素。
    $target.attr('data-value'); // Or:
    $target.data('value');