【问题标题】:How to access li elements within ul tag如何访问 ul 标签中的 li 元素
【发布时间】:2013-07-31 23:40:48
【问题描述】:

我想知道如何访问 ul 中的每个 li?我不确定 ul 的确切名称是什么。

代码如下:

<ul class= "selectBox-options exp-pdp-size-dropdown exp-pdp-dropdown" style>
    <li class = " omitted">
        more li here omitted
 </ul>

我的主要目标是让用户在下拉菜单中点击一个尺寸,比如说尺寸 8,它会自动检测 ul 中的特定 li(8)

【问题讨论】:

  • 代码在哪里??没看到……
  • 你想要一个jQuery解决方案吗?
  • ul li?为什么这不起作用?
  • @mohkhan 现在应该更新了
  • @Brilliand 是 jQuery

标签: javascript jquery html css


【解决方案1】:

你可以使用querySelectorAll:

var array_of_li =  document.querySelectorAll("ul.selectBox-options li");

如果您不确定 ul 是否具有 selectBox-options 类,请删除 .selectBox-options 部分 - 但请记住,届时页面上的每个 li 都会为您提供。

如果你使用的是 jQuery,那么它的兼容性会更好一些,并且做的事情基本上是一样的:

var li =  $("ul.selectBox-options li");

【讨论】:

  • 所以我的主要目标是为一个网站,当用户点击一个尺寸让我们说 8 它会自动选择特定的 li 指向 ul 中的 8。有没有办法使用 .click() 呢?
  • 看看我在上面留下的评论
  • 点击了什么?是的,click 可以和这个一起使用,但是代码是什么样的取决于被点击的内容。
  • 所以这真的是关于 jQuery UI 下拉菜单吗?那么你根本不应该做这个问题所要求的事情。使用 jQuery UI 方法告诉下拉列表应该设置什么值。
【解决方案2】:

如果你接受 jQuery,就像你提到的:

$( "li" ).each(function( index ) {
    console.log( index + ": " + $(this).text() );
});

正如 jQuery documentation 所声明的那样。

我不确定如何使用原始 javascript 来做到这一点:)

【讨论】:

    【解决方案3】:

    在 CSS 中:

    li { color:black; }
    

    与 ul:

    ul li { }
    

    或与类:

    ul li.ommitted { }
    

    或使用 ul&li 类

    ul.selectBox-options li.ommitted { }
    

    ps。不要忘记结束标签

    </li>
    

    【讨论】:

    • &lt;li&gt; 的结束标签是可选的。
    • 看来是这样,谢谢您的信息。我曾经做xhtml,在其中你总是必须关闭并且在html5之后一直在这样做。幸运的是,我的 IDE 自动完成 html 标签,所以并没有浪费太多时间。不利的一面是用户在下载我的可选结束标签时会损失相当多的带宽。抱歉,我无法首先回答您的问题。希望你能得到这份工作。
    【解决方案4】:
    <html>
      <head>
    
        <style type='text/css'>
          .omitted {
            color:                  rgb(0, 0, 0);
            background:             transparent;
          }
    
          .selected {
            color:                  rgb(255, 255, 255);
            background:             rgb(0, 0, 0);
          }
        </style>
    
        <script type='text/javascript'>
          function matchSelected(foo) {
            var selectBox =         document.getElementById('selectBox');
            var items =             selectBox.getElementsByTagName('LI');
    
            for(i=0; i<items.length; i++) {
              items[i].className =  items[i].innerHTML == foo ? 'selected' : 'ommitted';
            }
          }
        </script>
    
      </head>
    
    
      <body>
    
    
        <ul id='selectBox' class='selectBox-options exp-pdp-size-dropdown exp-pdp-dropdown'>
          <li class='omitted'>1</li>
          <li class='omitted'>3</li>
          <li class='omitted'>8</li>
          <li class='omitted'>10</li>
          <li class='omitted'>14</li>
        </ul>
    
    
        <select onChange='matchSelected(this.value);'>
          <option value='1'>One</option>
          <option value='3'>Three</option>
          <option value='8'>Eight</option>
          <option value='10'>Ten</option>
          <option value='14'>Fourteen</option>
        </select>
    
    
      </body>
    </html>
    

    【讨论】:

      【解决方案5】:

      你想要这样吗?演示http://jsfiddle.net/yeyene/ZjHay/

      $(document).ready(function(){
          $('select').on('change',function(){
              alert($('.selectBox-options li').eq($(this).val()-1).text());
          });
      });
      

      【讨论】:

        【解决方案6】:

        如果selectul 是同一父元素内的兄弟姐妹(例如div),您可以使用querySelectorquerySelectorAll 来选择正确的ul 元素及其子元素.

        HTML

        <div id="container">
        
            <select>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
            </select>
        
            <ul>
                <li>Item 1</li>
                <li>Item 2</li>
                <li>Item 3</li>
                <li>Item 4</li>
            </ul>
        
        </div>
        

        JavaScript

        var select = document.querySelector( "#container > select" );
        var ul_children = ul_list.querySelectorAll( "#container > select ~ ul > li" );
        var selected_li = undefined; // Undefined for now, see below for setting its value.
        
        // If we got results for both select and ul_children.
        if ( select !== null && ul_children.length > 0 )
        {
            // Map function to the select's "change" event to pick a correct list item.
            select.addEventListener( "change", function( event )
            {
                // Get the select's value after changing the option.
                var selected = select.value;
        
                // Decrement with 1 to fix offset (ul_children starts from 0).
                selected--;
        
                // use the select's value to choose the right list item from the li collection.
                selected_li = ul_children.childNodes[ selected ];
            });
        }
        

        (以上代码可能不是开箱即用的跨浏览器兼容,请记住使用工作代码。)

        在上面的代码中,我们首先得到select元素和ul的子元素(lis)。然后我们将一个匿名函数(也可以命名)映射到selects change 事件(每次选择一个选项时都会触发该事件)。然后,此函数从我们在第二行获取的项目集合中选择正确的 li 项目并将其分配给名为 selected_li 的变量。

        现在您可以随意操作和使用selected_li

        编辑:使用 jQuery,这项工作可能会更容易一些。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        • 2020-02-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-06
        • 2013-07-15
        • 1970-01-01
        相关资源
        最近更新 更多