megas
megas

Reputation: 21791

jquery prev() doesn't work

I have this html code:

<body>
<div class="CodeRay">
<div class="code"><pre><span class="no">   1</span> require <span class="s"><span class="dl">'</span><span class="k">yaml</span><span class="dl">'</span></span>
<span class="no">   2</span> require <span class="s"><span class="dl">'</span><span class="k">set</span><span class="dl">'</span></span>
<span class="no">   3</span> 
<span class="no">   4</span> <span class="r">module</span> <span class="cl">ActiveRecord</span> <span class="c">#:nodoc:</span>
<span class="no">   5</span>   <span class="c"># Generic Active Record exception class.</span>
<span class="no">   6</span>   <span class="r">class</span> <span class="cl">ActiveRecordError</span> &lt; <span class="co">StandardError</span>
<span class="no">   7</span>   <span class="r">end</span>
<span class="no">   8</span>
...
</body>

For this html code I have javascript:

$(document).ready(function() {
  $('span').not('.no,.c,.r,.pc').click(function(e) {
    var target = $(e.target);
    var element = target.prev('.no');
    element.effect('highlight', {}, 'slow');
});

The problem is prev() returns the same object as before, can't find .no element. It doesn't searching through the predecessors of elements in DOM tree. Thanks

Upvotes: 1

Views: 591

Answers (2)

ShaneBlake
ShaneBlake

Reputation: 11096

Here's a working example on jsFiddle:

http://jsfiddle.net/shaneblake/bRRmA/

I've updated the jsfiddle with the following line of code to address your comments:

$(this).prevAll('.no:first').effect('highlight', {}, 'slow');

Upvotes: 1

Mutation Person
Mutation Person

Reputation: 30500

Well, you selector $('span').not('.no,.c,.r,.pc') excludes all .no so its hardly surprising you're seeing nothing.

You could try:

$(document).ready(function() {
  $('span').click(function(e) {
    var $this = $(this);
    if (!$this.is(".no,.c,.r,.pc"){
        $this.prev('.no').effect('highlight', {}, 'slow');
    }
});

Upvotes: 2

Related Questions