tags:

views:

31

answers:

2

Hello

I want select all items that haven't an IMG tag and append it. I can do that:

How can i do that?

  <div class="test">
     <div class="someDummydiv"></div>
  </div>
  <div class="test">
     <div class="someDummydiv"></div>
     <img src="try.gif" />
  </div>
  <div class="test">
     <div class="someDummydiv"></div>
  </div>
  <div class="test">
    <div class="someDummydiv"></div> 
    <img src="try.gif" />
  </div>
  <div class="test">
     <div class="someDummydiv"></div>
  </div>
  <div class="test">
     <div class="someDummydiv"></div>
     <img src="try.gif" />
 </div>

Result -->

  <div class="test">
     <div class="someDummydiv"></div>
     <img src="try.gif" />
  </div>
  <div class="test">
     <div class="someDummydiv"></div>
     <img src="try.gif" />
  </div>
  <div class="test">
     <div class="someDummydiv"></div>
     <img src="try.gif" />
  </div>
  <div class="test">
     <div class="someDummydiv"></div>
     <img src="try.gif" />
  </div>
  <div class="test">
     <div class="someDummydiv"></div>
     <img src="try.gif" />
  </div>
  <div class="test">
     <div class="someDummydiv"></div>
     <img src="try.gif" />
  </div>

Thank you very much

+5  A: 

You can use a selector that checks for existence using :not() and :has(), and append to those, like this:

$('.test:not(:has(img))').append('<img src="try.gif" />');

Just replace the selector inside the :not(:has(selector)) to look for what you want to .append().

Nick Craver
That's really clean. My approach should work as well, and would allow extra processing for elements that don't have images as well, but a one liner is always nice. :)
g.d.d.c
A: 

This should come close:

$('div.test').each(function () {
  var $this = $(this);
  if ($this.children('img').size() == 0) {
    $this.append('<img src=try.gif>');
  }
});
g.d.d.c