定位每两个元素 - Javascript / jQuery

时间:2018-05-25 12:02:14

标签: javascript jquery list

我正在努力解决js中的一段代码。

我有一张桌子,我想迭代它并为前两个tr做一些事情,而不是第三个和第四个等。为了使它更清洁,我会在这里写一个列表。

假设我想为每两个元素提供一个类。 像这样:

<li></li> <!-- class1-->
<li></li> <!-- class1-->
<li></li> <!-- class2-->
<li></li> <!-- class2-->
<li></li> <!-- class3-->
<li></li> <!-- class3-->
<li></li> <!-- class4-->
<li></li> <!-- class4-->
etc ..

我在考虑for循环,但我无法弄清楚如何定位每一个。此外,我发现'切片'但似乎你可以选择两个其他项目之间的项目。 我想创建一个while循环来改变切片中start和end的值,但是想不到这样做的好方法。

这有什么用吗?

4 个答案:

答案 0 :(得分:1)

您可以循环index元素并使用%和余数运算符nth来获取每个let c = 1; $("li").each(function(i) { $(this).attr('class', 'class' + c).text(c) if ((i - 1) % 2 == 0) c++; })元素并执行某些操作。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
Dim wr As HttpWebRequest = CType(WebRequest.Create("http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_lotfac.zip"), HttpWebRequest)
    wr.KeepAlive = True
    wr.AllowAutoRedirect = True
    wr.ServicePoint.Expect100Continue = False
    wr.CookieContainer = New CookieContainer
    wr.AutomaticDecompression = DecompressionMethods.GZip
    wr.Headers.Add("Accept-Encoding: Deflate, gzip")

    Dim ws As HttpWebResponse = CType(wr.GetResponse(), HttpWebResponse)
    Dim str As Stream = ws.GetResponseStream()
    Dim inBuf(ws.ContentLength) As Byte
    Dim bytesToRead As Integer = CInt(inBuf.Length)
    Dim bytesRead As Integer = 0
    While bytesToRead > 0
        Dim n As Integer = str.Read(inBuf, bytesRead, bytesToRead)
        If n = 0 Then
            Exit While
        End If
        bytesRead += n
        bytesToRead -= n
    End While
    Dim fstr As New FileStream("x:\temp\D_lotfac.zip", FileMode.OpenOrCreate, FileAccess.Write)
    fstr.Write(inBuf, 0, bytesRead)
    str.Close()
    fstr.Close()

答案 1 :(得分:0)

不确定你到底在做什么,但也许像这样的循环可以提供帮助。

for(let i=0; i<list.length; i+=2){
    doSomething(list[i], getSpecialParam(i/2));
    doSomething(list[i+1], getSpecialParam(i/2));
}

当使运行更大时,您可能想要嵌套循环

for(let i=0; i<list.length; i+=runLength){
    for(let j=0; j<runLength; j+=1){
        doSomething(list[i+j], getSpecialParam(i/runLength));
    }
}

const list = $('li');
const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

const runLength = 2;

for(let i=0; i<list.length; i+=runLength){
  for(let j=0; j<runLength; j++){
    list[i+j].textContent = letters[(i/runLength)%letters.length];
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
<ul>

答案 2 :(得分:0)

如果您想要基于配置的元素分解,请使用length = 2或您想要的任何内容。您将获得具有所需长度的子数组

var items=$("li"),index=1,length=2;
 while(items.length) {    
    $(items.splice(0,length)).each(function() {
       $(this).addClass('class'+index).text('class'+index);      
  });
   index+=1;
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>

答案 3 :(得分:0)

您可以使用jQuery迭代它们来向table tr元素添加类:

var i = 1;
var sumupi = 0;

jQuery("table tr").each(function(){
    jQuery(this).addClass('class-' + i);
    if (sumupi == 1) {
        i++;
        sumupi = 0;
    }
    else {
        sumupi = 1;
    }
});