簡體   English   中英

遍歷無序列表以添加和刪除類

[英]Looping through unordered list to add and remove classes

我正在嘗試遍歷無序列表,並遍歷每個列表項(帶有ticker-item類),並臨時向其添加一個類,以便CSS可以對其進行一些轉換。

var a = [];
$(".ticker-item").each(function(index) {
  a[index] = $(this);
  setTimeout(function() {
    a[index].addClass('current').delay(500).queue(function(next) {
      a[index].removeClass('current');
      next();
    });
  }, index * 500);
});

我搜索了各種SO文章,並且我相信該函數將正確添加和刪除類,但是當前似乎不使用li的嗎?

這是HTML:

      <div class="ticker">
        <ul class="ticker-items">
            <li class="ticker-item">
                <a href="/categories/featured/summer-sale/1185">
                    <p><strong>Summer Sale</strong>🍦 Now more things at <strong>50% off!</strong></p>
                </a>
            </li>
            <li class="ticker-item">
                <a href="/about">
                    <p>Things for kids you'll 💗 too. <strong>Our story</strong></p>
                </a>
            </li>
            <li class="ticker-item">
                <a href="/help/delivery-and-returns">
                    <p><strong>Free</strong> Delivery* &amp; <strong>Free</strong> Returns 📦</p>
                </a>
            </li>
        </ul>
    </div>

您不使用類ticker-item遍歷元素,而是遍歷如下元素: <ticker-item> ... </ticker-item>

要更改循環,您必須使用類選擇器:

$(".ticker-item").each

您沒有按班級名稱訪問,

將$(“ ticker-item”)。each更改為$(“。ticker-item”)。each(類選擇器)

根據定義, addClassremoveClass都在使用隊列。 因此jQuery#delay將對這些方法無效。

解決方案是將它們都執行到排隊的回調中,以便將它們推入隊列,如下所示:

 setTimeout(() => { $('#noqueue') .addClass('colored') .delay(2000) .removeClass('colored'); $('#queue') .queue(function(next) { $(this).addClass('colored'); next(); }) .delay(2000) .queue(function() { $(this).removeClass('colored'); }); }, 1000); 
 div { transition: color .5s; } .colored { color: red; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="noqueue">no queue</div> <div id="queue">with queue</div> 

我在下面舉了一個鏈接動畫的示例。

請注意,我沒有使用setTimeout而是只使用jQuery#delay ,因為我發現它更干凈。

另外,如果要在不刷新頁面的情況下重新執行動畫,請不要忘記使動畫出隊。

 $('button').on('click', () => { $('ul > li').each((i, li) => { $(li) .delay(500 * (i + 1)) .queue(next => { $(li).addClass('colored'); next(); }) .delay(750) .queue(() => ($(li).removeClass('colored'), $(li).dequeue())); }); }); 
 ul > li { transition: color 1s; } .colored { color: red; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <ul> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> <li>Item</li> </ul> <button>Color them!</button> 

刪除並重新添加 Class 屬性<div>無序列表項</div><div id="text_translate"><p>這是我能夠解決的答案。 想要在按鈕單擊事件從 Hyperlink1 發生到 Hyperlink3 后更改 css class="jsTree-clicked"。 </p><p></p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"><div class="snippet-code"><pre class="snippet-code-js lang-js prettyprint-override"> $(document).ready(function () { //remove Class $('#myJSTree').find('.jsTree-clicked').removeClass('jsTree-clicked'); //need to do add it to List Item which has Id =3 //check the list item which has id =3 if so add the class to it // It is not a button click event. $('#myJSTree li').each(function (i, li) { console.log('&lt;li&gt; id =' + $(li).attr('id')); var myIdVal = $(li).attr('id'); if (myIdVal == 3) { $(this).addClass('jsTree-clicked'); } }); });</pre><pre class="snippet-code-css lang-css prettyprint-override"> .jsTree-clicked { background-color:red;}</pre><pre class="snippet-code-html lang-html prettyprint-override"> &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt; &lt;div id="myJSTree"&gt; &lt;ul class="nav nav-list"&gt; &lt;li id="1"&gt; &lt;a class="jsTree-clicked" title="Hyperlink1"&gt;HyperLink1&lt;/a&gt; &lt;/li&gt; &lt;li id="2"&gt; &lt;a title="Hyperlink2"&gt;HyperLink2&lt;/a&gt; &lt;/li&gt; &lt;li id="3"&gt; &lt;a title="Hyperlink3"&gt;HyperLink3&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;</pre></div></div><p></p><p> 單擊超鏈接時,JsTree 添加一個 class="jsTree-clicked"。 當您導航到不同的節點時,它將刪除並重新添加相同的 class 到導航節點。</p><p> 預期的</p><p>我想要一個 function 根據 div 內的 ID 刪除給定列表項的 [class="jsTree-clicked"]。 並通過傳遞 Key ie ID 將 [class="jsTree-clicked"] 重新添加到任何 ListItem。</p><p> 我希望我能夠解釋我的問題。 謝謝</p><p>我的 JSTree 是第三方開源的。</p></div>

[英]Remove and re-add Class Attribute inside a <div> unordered list item

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 遍歷數組時,如何從符合特定條件的元素中添加/刪除類? 如何刪除超鏈接並在javascript創建的無序列表中添加類? 通過復選框添加和刪除CSS類 jQuery通過無序列表進行動畫處理 通過javascript創建無序列表 遍歷課程並更改顏色 通過按鈕列表添加和刪除類 如何在反應中迭代 DOM 元素並添加/刪除類? 刪除並重新添加 Class 屬性<div>無序列表項</div><div id="text_translate"><p>這是我能夠解決的答案。 想要在按鈕單擊事件從 Hyperlink1 發生到 Hyperlink3 后更改 css class="jsTree-clicked"。 </p><p></p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"><div class="snippet-code"><pre class="snippet-code-js lang-js prettyprint-override"> $(document).ready(function () { //remove Class $('#myJSTree').find('.jsTree-clicked').removeClass('jsTree-clicked'); //need to do add it to List Item which has Id =3 //check the list item which has id =3 if so add the class to it // It is not a button click event. $('#myJSTree li').each(function (i, li) { console.log('&lt;li&gt; id =' + $(li).attr('id')); var myIdVal = $(li).attr('id'); if (myIdVal == 3) { $(this).addClass('jsTree-clicked'); } }); });</pre><pre class="snippet-code-css lang-css prettyprint-override"> .jsTree-clicked { background-color:red;}</pre><pre class="snippet-code-html lang-html prettyprint-override"> &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt; &lt;div id="myJSTree"&gt; &lt;ul class="nav nav-list"&gt; &lt;li id="1"&gt; &lt;a class="jsTree-clicked" title="Hyperlink1"&gt;HyperLink1&lt;/a&gt; &lt;/li&gt; &lt;li id="2"&gt; &lt;a title="Hyperlink2"&gt;HyperLink2&lt;/a&gt; &lt;/li&gt; &lt;li id="3"&gt; &lt;a title="Hyperlink3"&gt;HyperLink3&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;</pre></div></div><p></p><p> 單擊超鏈接時,JsTree 添加一個 class="jsTree-clicked"。 當您導航到不同的節點時,它將刪除並重新添加相同的 class 到導航節點。</p><p> 預期的</p><p>我想要一個 function 根據 div 內的 ID 刪除給定列表項的 [class="jsTree-clicked"]。 並通過傳遞 Key ie ID 將 [class="jsTree-clicked"] 重新添加到任何 ListItem。</p><p> 我希望我能夠解釋我的問題。 謝謝</p><p>我的 JSTree 是第三方開源的。</p></div> 用來選擇div和添加/刪除類的香草Javascript循環功能的異常行為
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM