tags:

views:

2865

answers:

5

I have the next function:

function setImagesWidth(id,width) {
    var images = document.getElementById(id).getElementsByTagName("img");
    for(var i = 0; i < images.length;i++) {
     // If the real width is bigger than width parameter
      images[i].style.width=width; 
     //}   
    }  
}

I would like to set the css width attribute of all my img tags to a particular value only when the image real width is bigger than the attribute value. If it is possible, i would like a solution which does not use any particular framework.

Thanks in advanced!

+3  A: 

Here is, hopefully, enough sample code to give you what you want:

var myImage = document.getElementById("myImagesId");
var imageWidth = myImage.offsetWidth;
var imageHeight = myImage.offsetHeight;

That should give you the numbers you need to derive the solution you want. I think you can write the rest of the code yourself. :)


EDIT: Here, I couldn't help myself - is this what you are after?

function setImagesWidth(id,width) {
   var images = document.getElementById(id).getElementsByTagName("img");
   for(var i = 0; i < images.length;i++) {
      if(images[i].offsetWidth > width) {
         images[i].style.width= (width + "px");
      }
   }           
}
Jason Bunting
A: 

Careful, it looks like you might rather want clientWidth:

http://developer.mozilla.org/en/Determining_the_dimensions_of_elements

Domenic
A: 

images[i].offsetWidth returns 111 for an image of 109px width. Is this because 1px each side border?

Sergio del Amo
A: 

EDIT: Can i accept somehow this answer as the final one?

Since offsetWidth does not return any unit, the .px ending must be concatenated for the css attribute.

// width in pixels
function setImagesWidth(id,width) {
    var images = document.getElementById(id).getElementsByTagName("img");
    for(var i = 0; i < images.length;i++) {
     if(images[i].offsetWidth > width) {
      images[i].style.width= (width+".px"); 
     }   
    }  
}
Sergio del Amo
+1  A: 

@Sergio del Amo: Indeed, if you check out my link you'll see that you want clientWidth instead.

@Sergio del Amo: You cannot, unfortunately, accept your own answer. But you do have an extraneous period in the "px" suffix, so let's go with this, including the clientWidth change:

// width in pixels
function setImagesWidth(id, width)
{
    var images = document.getElementById(id).getElementsByTagName("img");
    var newWidth = width + "px";
    for (var i = 0; i < images.length; ++i)
    {
        if (images[i].clientWidth > width)
        {
            images[i].style.width = newWidth;
        }                       
    }
}
Domenic