4

I was experimenting with jQuery and came across a question. Can I use an actual selector with existing element as a combined selector for jQuery?

So, suppose I've created a DIV element on-the-fly:

var $div = $('<div>')
               .css('position', 'absolute')
               .hide();    // Just to be short

$('body').append($div);

And I want to show it when user hovers over P elements / paragraphs (at the cursor position):

$('p').hover(function(e) {

    // Change the position of $div with regards of cursor position

    $div.show();
}, function(e) {
    $div.hide();
});

BUT also I want to apply this hover handlers to $div itself. So instead of duplicating my code, I want to do something like this:

$('p', $div).hover(...)

which will select $div element along with all P elements.

I know I can write functions separately and pass the names as arguments to hover function.

Is there any solution to this kind of situation in jQuery? or is there a more accurate solution?

3
  • 1
    have a look at .add() api.jquery.com/add -- something like $("p").add($div) should do the trick Commented Jun 2, 2014 at 12:32
  • Just FYI $('p', $div) will select p elements inside the $div. It is the same as $div.find('p');. It is not aggregating the two selectors. Commented Jun 2, 2014 at 12:33
  • Thanks @RoryMcCrossan, I know that ;) Commented Jun 2, 2014 at 12:35

2 Answers 2

6

You could use the jQuery add method:

$('p').add($div).hover(function(e) { ...
Sign up to request clarification or add additional context in comments.

2 Comments

Thank you. Didn't hear about that before.
add() is right when you have to combine only two elements, but what when you want to combine a lot? $('p').add($div).add($div).add($div).add($div).add($div).add($div) ... looks very dirty.
1

If you have multiple elements to combine you don't wan to do

$('p').add($div1).add($div2).add($div3).add($div4).add($div5).add($div6) ...

Instead you want to convert a JavaScript array into a jQuery object

$( $.map([x,y,z], a => [...$.makeArray(a)]) )

Source: Merging jQuery objects

3 Comments

You don't have to do $('p').add($div1).add($div2).... It also accepts an array of elements (and html, and selection): api.jquery.com/add/#add-elements
@KarlenKishmiryan You're right but there is still a difference, see i.imgur.com/YS7pFLK.png
Also the method I show will flatten the elements is they contains sub-elements.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.