jQuery: prev(<selector>) not working?

微笑、不失礼 提交于 2019-11-27 06:38:08

问题


I'm having trouble using prev() in jQuery where it's not selecting the right element.

My HTML structure is as follows:

<section id="about">
    ...
</section>
<hr>
<section id="contact">
    ...
</section>

The "active" section is #contact. I want to select the previous section skipping over the <hr>

active = active.prev('section') doesn't seem to be working. I think I may be reading the docs wrong...

If I take out the <hr> everything works beautifully. Any ideas on how to skip the <hr> on prev()?

TIA


回答1:


I think I may be reading the docs wrong...

The API docs for .prev() give this description:

Description: Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.

So, the problem is that the hr is there and being searched by .prev(), then tested against the 'section' selector.


Any ideas on how to skip the <hr> on prev()?

You could call .prev() once to skip over that hr then call it again for the section:

active = active.prev().prev('section');

Or use .prevAll() and find the closest-preceding one (in case there are any other sections occurring before it):

active = active.prevAll('section').first();



回答2:


Use prevAll() instead

active = active.prevAll('section')

from jQuery documentation:

prev() => "Get the immediately preceding sibling" so it will only get the first element, that's why when you remove the <hr>, it will work.




回答3:


Or try:

<section id="about">
    ...
<hr>
</section>
<section id="contact">
    ...
</section>



回答4:


Just do

active = active.prevAll('section').eq(0);

seems that .prev() and .next() only select the nearest sibling, no matter if you provide a specific selector to it. If that selector doesn't match the sibling, .next('section').length will be 0. Therefore by using the above method, you get all preceding siblings matching your selector and with .eq(0) you select the closest one.



来源:https://stackoverflow.com/questions/5452917/jquery-prevselector-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!