Reputation: 21791
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> < <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
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
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