2015-07-03 63 views
4

我開發一個Chrome擴展,並試圖遍歷網頁爲具有格式的多個實例的要素如下圖所示:最好的辦法網頁的元素迭代在JavaScript/jQuery的

<div class="wrapper"> 
    <span class="loud" style="text-decoration: none;">...</span> 
    <div class="leave-gap">...</div> 
    <p>"Some text"</p> 
    <span id="id_12345" class="none">...</span> 
    <div class="block-footer">...</div> 
    <div class="leave-gap">...</div> 
</div> 

基本上在某些條件下,我要隱藏第一個leave-gap類和block-footer類。

我建議找loud類如下:

$('.wrapper .loud').each(function() 
{ 
    var $a = $(this); 
    ... 

假設我用表格$a.next()的語法來找到每個隨後的元素,我將如何確定類的元素呢?

有沒有比我提出的解決方案更快的方法?

在此先感謝。

+1

你的意思是像$ a.next( '離開隙')? – cforcloud

+0

你可以通過$(element).hasClass('leave-gap')檢查一個類是否存在。 – alphakevin

+0

感謝所有的評論。我需要玩這個。正如你可能從這個問題中可以看出的,我對JavaScript很新穎,這是一個「午餐時間」項目。你們都非常樂於助人! – Richard

回答

1

您可以使用$(element).children().each(loopfunction)這樣的伎倆。

假設您想隱藏兩個特定元素之間的所有內容。

檢查測試用例:

$('.wrapper').each(function() { 
 
    var foundgap = false 
 
    $(this).children().each(function(){ 
 
     if ($(this).hasClass('leave-gap')) { 
 
      foundgap = true; // mark the beginning of block 
 
      return; 
 
     } else if ($(this).hasClass('block-footer')) { 
 
      return false; // meet the end, break 'each' loop 
 
     } else if (foundgap) { 
 
      $(this).hide(); // I'm inside the block. do whatever you need 
 
     } 
 
    }) 
 
});
*:not(body):not(html) { 
 
    border: 1px solid blue; 
 
    margin: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="wrapper"> 
 
    <span class="loud" style="text-decoration: none;">loud1</span> 
 
    <div class="leave-gap">leave-gap</div> 
 
    <p>"Some text"</p> 
 
    <span id="id_12345" class="none">id</span> 
 
    <div class="block-footer">fotter</div> 
 
    <div class="leave-gap">leave-gap</div> 
 
</div> 
 
<div class="wrapper"> 
 
    <span class="loud" style="text-decoration: none;">loud2</span> 
 
    <div class="leave-gap">leave-gap</div> 
 
    <p>"Some text"</p> 
 
    <span id="id_12345" class="none">id</span> 
 
    <div class="block-footer">fotter</div> 
 
    <div class="leave-gap">leave-gap</div> 
 
</div>

4

假設你發現在你途中的元素,找到類的元素,

$(element).attr("class")

,或者你可以驗證類是你想要的,

$(element).hasClass("className")

0

您也可以用class name隱藏div標籤。

$(document).ready(function() { 
//may be you can put the below in a function and call it when you condition meet. 
    $('.leave-gap').hide(); 
    $('.block-footer').hide(); 
}); 

Working Plunker

Other link: find()class-selector

+0

謝謝邁克。我將如何隱藏

「一些文字」

部分使用這種技術? – Richard

+0

$('p')。hide() - 我說我是這個東西的新手! – Richard

1

一個現代的Javascript可能性。

var firstLeaveGaps = document.querySelectorAll('.wrapper .leave-gap:first-of-type'); 
 

 
Array.prototype.forEach.call(firstLeaveGaps, function (leaveGap) { 
 
    var next = leaveGap.nextElementSibling; 
 

 
    while (next) { 
 
     if (next.classList.contains('block-footer')) { 
 
      break; 
 
     } 
 
     
 
     next.style.display = 'none'; 
 
     next = next.nextElementSibling; 
 
    } 
 
});
<div class="wrapper"> 
 
    <span class="loud" style="text-decoration: none;">loud</span> 
 
    <div class="leave-gap">leave-gap</div> 
 
    <p>"Some text"</p> 
 
    <span id="id_12345" class="none">id</span> 
 
    <div class="block-footer">block-footer</div> 
 
    <div class="leave-gap">leave-gap</div> 
 
</div> 
 
<div class="wrapper"> 
 
    <span class="loud" style="text-decoration: none;">loud</span> 
 
    <div class="leave-gap">leave-gap</div> 
 
    <p>"Some text"</p> 
 
    <span id="id_54321" class="none">id</span> 
 
    <div class="block-footer">block-footer<div> 
 
    <div class="leave-gap">leave-gap</div> 
 
</div>

+0

誰使用這個冗長的香草代碼,如果他可以用jQuery做兩行? –

+0

'有沒有比我提出的解決方案更快的方法?'這兩行jQuery更快嗎? – Xotic750

+0

問題標題「在JavaScript/jQuery中迭代網頁元素的最佳方式」以及「我正在開發Chrome擴展程序」這個問題的開頭句子 - 現代 – Xotic750