如何在jquery中访问列表中的所有子<li>元素?

时间:2015-10-07 00:36:27

标签: javascript jquery html

例如,我有一个类似于以下内容的HTML代码:

<ul id="li1">
  <li>a</li>
  <li>b</li>
  <li>c</li>
  <li>d</li>
  <li>e</li>
  <li class="class1">f</li>
  <li>g</li>
</ul>

我想遍历每个<li>元素并检查它是否有特定的类&#34; class1&#34;。我正在寻找看起来像(python等效)的东西:

for i in $("#li1").children():
    print i.hasClass("class1")

我无法找到一种方法来评估javascript或jquery中的每个子<li>元素。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

您无法直接在<li>下嵌套<li>。这将是一个无效的加价。虽然,你可能会有这样的事情:

<ul id="li1">
  <li>a</li>
  <li>b</li>
  <li>c</li>
  <li>d</li>
  <li>e</li>
  <li class="class1">f</li>
  <li>g</li>
</ul>

因此,对于上面的代码,要获得相同的输出,请使用以下方式:

$("#li1 li").each(function () {
  console.log($(this).hasClass("class1"));
});

这将打印:

false
false
false
false
false
true
false

答案 1 :(得分:1)

它建立在Praveen所提供的基础之上,你也可以使用以下仅仅循环那些具有类的li标签

&#13;
&#13;
$("#li1 li.class1").each(function () {
  console.log($(this).hasClass("class1"));
});
&#13;
&#13;
&#13;

干杯

答案 2 :(得分:1)

这看起来像你在询问如何循环 JavaScript

以下是一种使用while的方法,该方法使用 falsy 值停留在索引处(即undefined

var i,                           // set up variables, 
    i_idx = 0,                   // initial index
    list = $("#li1").children(); // and interesting object

while (i = list[i++]) {
    console.log($(i).hasClass("class1"));
}

这是一种使用for的方法,通过在for

的比较表达空间中做两件事来查看所有指标
var list = $("#li1").children(); // interesting object

for (var i_idx = 0, i; i = list[i_idx], i_idx < list.length; ++i_idx) {
    console.log($(i).hasClass("class1"));
}

此处使用索引i设置i = list[i_idx],然后通过使用<在单个表达式中针对 length i_idx < list.length测试索引em>逗号运算符

请注意

  • 一个 jQuery对象的索引属性指向原生DOM对象,这就是为什么需要将它们包装在$(...)中以便用于< em> jQuery 再次。
  • whilefor等不提供var范围,变量 ii_idxlist 由其父功能(或全局范围)确定范围
  • listwhile的条件下生成for将导致每次迭代重新生成var。这通常是不希望的,这就是事先提前.forEach的原因。
  • 有用于迭代数组.mapfor (let i of $("#li1").children()) { console.log($(i).hasClass("class1")); } 等)的本机方法, jQuery 也提供了迭代方法,但你可能是如果您不知道这些来自哪里(例如 Array-like ,例如 NodeList 并不总是提供这样的方法),则意外地被发现了。

ES6

如果您在 EMCAScript 6 支持的环境中工作,则可以使用for..of,其行为与 python 示例中的行为相同,

// add rest.li's gradle plugins so they can be used throughout project
buildscript {
 repositories {
mavenLocal()
mavenCentral()
}
dependencies {
  classpath 'com.linkedin.pegasus:gradle-plugins:1.15.9'
}
}

task wrapper(type: Wrapper) {
 gradleVersion = '1.12'
}

 final pegasusVersion = '1.15.9'
 ext.spec = [
    'product' : [
            'pegasus' : [
                    'data' : 'com.linkedin.pegasus:data:' + pegasusVersion,
                    'generator' : 'com.linkedin.pegasus:generator:' + pegasusVersion,
                    'restliCommon' : 'com.linkedin.pegasus:restli-common:' + pegasusVersion,
                    'restliClient' : 'com.linkedin.pegasus:restli-client:' + pegasusVersion,
                    'restliServer' : 'com.linkedin.pegasus:restli-server:' + pegasusVersion,
                    'restliTools' : 'com.linkedin.pegasus:restli-tools:' + pegasusVersion,
                    'gradlePlugins' : 'com.linkedin.pegasus:gradle-plugins:' + pegasusVersion,
                    'restliNettyStandalone' : 'com.linkedin.pegasus:restli-netty-standalone:' + pegasusVersion,
                    'restliServerStandalone' : 'com.linkedin.pegasus:restli-server-standalone:' + pegasusVersion
            ]
    ]
]

allprojects {
  apply plugin: 'idea'
  apply plugin: 'eclipse'
}

subprojects {
 apply plugin: 'maven'

  afterEvaluate {
  if (project.plugins.hasPlugin('java')) {
  sourceCompatibility = JavaVersion.VERSION_1_6
   }

   // add the standard pegasus dependencies wherever the plugin is used
   if (project.plugins.hasPlugin('pegasus')) {
     dependencies {
    dataTemplateCompile spec.product.pegasus.data
    restClientCompile spec.product.pegasus.restliClient

    // needed for Gradle 1.9+
    restClientCompile spec.product.pegasus.restliCommon
     }
   }
 }

  repositories {
    mavenLocal()
    mavenCentral()
  }
}