2016-07-25 25 views
0

有什麼辦法從給定元素中選擇所有元素到另一個給定的元素? 例如:jquery得到所有從元素到元素

<div> 
    <div> 
     <a name="break1"></a> 
     <p> belongs to break 1</p> 
     <div> 
      <p> belongs to break 1</p> 
     </div> 
    </div> 
    <p>belongs to break 1</p> 
    <div> 
     <a name="break2"></a> 
     <p> belongs to break 2</p> 
     <div> 
      <p> belongs to break 2</p> 
      <div> 
       <p> belongs to break 2</p> 
      </div> 
     </div> 
    </div> 
</div> 

,我們需要像下面這樣:

$('[name*="break1"]').selectAllUntil('[name*="break2"]'); 

和結果應該是:

<p> belongs to break 1</p> 
<div> 
    <p> belongs to break 1</p> 
</div> 
<p>belongs to break 1</p> 

最重要的事情:需要往下看每個元素最多的兄弟姐妹到選擇器匹配的元素,如果我們沒有找到它,我們需要繼續搜索父節點

這可能是誤導,因爲我們需要選擇所有,直到下一個元素,即使下一個元素的父元素

+0

有一種方法可以做到這一點,但只是將html更改爲更有意義的方法會容易得多。 – adeneo

+0

你能更具體嗎?你指的是哪一個元素? –

+0

https://jsfiddle.net/kt10r6n5/ – adeneo

回答

1

存在假設HTML永遠是你可以嘗試使用prevAll()相同。

例子:

$('.break2').parent().prevAll().css('color', 'blue');

https://jsfiddle.net/kt10r6n5/1/

注:

如果您使用的是類像你在你的演示,然後,如果你有多個實例,這可能是有問題的同一班。然後,您必須找到該類的最後一個實例。這當然會更好用id。

文檔:

http://api.jquery.com/prevall/

+0

不錯,但不會爲我們工作 –

0

我在plunker創建方法: https://plnkr.co/edit/XUNCkYMJz4TEekLdBrJM?p=preview

此腳本返回jquery對象與selector1和選擇器2之間的元件的集合。

編輯。好吧,我現在進來了!它應該按預期工作。

重要 - 腳本正在處理選擇器父級的級別,所以依賴於html結構。

jQuery.fn.extend({ 
selectAllUntil: function(selector) { 

    var currentDiv=this.parent("div"); 
    var elements = $();//empty jquery collection 


    while(currentDiv.length){ 


    if (currentDiv.find(selector).length){ 
     //if our element have inside selector then this is end 
     return elements; 

    }else{ 
     //no selector so add 
     elements= elements.add(currentDiv); 
    } 

    //next element 
    currentDiv=currentDiv.next(); 

    } 



    }}); 

//usage: 
$(function(){ 

    var elements=$('[name*="break2"]').selectAllUntil('[name*="break4"]'); 
    elements.css("color","red"); 



}); 
+0

嗨maciej,感謝您的回答,我們不知道下一個(直到)元素是兄弟姐妹還是父母或子元素的後代 –

+0

這不是你需要的嗎? –

+0

感謝您的回答,但我們不知道next(until)元素是sibiling還是父元素或子元素的後代 –