For example I have simple html.
<body>
<div class="a">
<div class="child"></div> <!-- div element I click -->
<div class="childINeedToSelect"></div> <!-- div element I need to be selected -->
<div class="child"></div>
</div>
<div class="a">
<div class="child"></div>
<div class="childINeedToSelect"></div>
<div class="child"></div>
</div>
</body>
When I click on top first child class div I need to change, for example, border ONLY of the first childINeedToSelect class div. They have the same parent – a class div, but the difficult is that there are more than just one element with class a. I’ve already tried:
$(document).ready(function () {
var child = $('.child');
child.bind('click', function() {
detectElement($(this));
});
});
var belt;
function detectElement(arrow) {
belt = arrow.parent('.a').children('childINeedToSelect').eq(1);
belt.css("background-color", "red");
}
As you see I’m trying to send $(this) as parameter to detectElement() to determine which div was clicked. But my target div background doesn’t change, and when I try to use element belt later, after it was detected by detectElement() function, Opera javascript debugger gives me error
Unhandled Error: Cannot convert 'belt.css('marginLeft')' to object
in line
var currentMargin = parseInt(belt.css('marginLeft').toString().replace('px', ''));
but this line of code worked perfectly, before calling detectElement() function; What am I doing wrong? How should I select element I need?
I’d suggest:
JS Fiddle demo.
Or you could use the
nextAll()method to find the siblingchildINeedToSelect:JS Fiddle demo.
And if you should have multiple
.childandchildINeedToSelectelements, you can pass the:firstselector into thenextAll()method:JS Fiddle demo.
I’m unsure why you were using
bind(), but on the off-chance that you might be trying to account for dynamically-added elements (added after the event-handlers are bound to the various DOM nodes/jQuery objects), you could instead useon():JS Fiddle demo.
References:
find().:firstselector.nextAll().on().parent().