2015-07-16 3 views
1

Привет, ребята, у меня проблема с получением ширины нескольких изображений, хранящихся в DOM.Получите ширину нескольких изображений, хранящихся в DOM

Мой HTML выглядит следующим образом:

<div id="showcase" class="showcase"> 

     <div class="showcase-slide"> 
      <div class="showcase-content"> 
       <img src="https://asp.zone-secure.net/v2/90/10158/58365/multimedia/1_1/1.jpg" alt="02" /> 
      </div> 

     </div> 
     <div class="showcase-slide"> 
      <div class="showcase-content"> 
       <img src="https://asp.zone-secure.net/v2/90/10158/58365/multimedia/1_1/2.jpg" alt="02" /> 
      </div> 

     </div> 
     <div class="showcase-slide"> 
      <div class="showcase-content"> 
       <img src="https://asp.zone-secure.net/v2/90/10158/58365/multimedia/1_1/3.jpg" alt="02" /> 
      </div> 

     </div> 
     <div class="showcase-slide"> 
     <div class="showcase-content"> 
       <img src="https://asp.zone-secure.net/v2/90/10158/58365/multimedia/1_1/4.jpg" alt="02" /> 
      </div> 

     </div> 

Что я пробовал:

for(var i=0; i < mineContor; i++){ 
        var img = $("img")[i]; 
        console.log(img.width); 
       } 

Спецификация: mineContor = 4 (сколько ГИМ у меня есть);

Выпуск:

240 
(3) 0 

Иногда это как выше консоли, где 240 ширина РХ реальная ширина 1-го изображения. Иногда, как рев.

(4) 0 

Даже если console.log(img.src); возвращается на 4 изображения, которые я имею в DOM с правильного пути Src! Кроме того, эти изображения имеют разные размеры.

Вопрос:

Почему ширина 0 и нет?

+0

Я думаю, это потому, что изображения не полностью загружены! –

+0

Какова ценность 'mineContor'? –

+0

Еще раз проверьте краткий, пожалуйста, я написал там. Но, скажем, еще раз, значение переменной mineContor равно 4 (количество изображений, доступных в DOM). – OzZie

ответ

1

Написать свой код в $(window).load(function(){});

Это происходит потому, что он выполняет, когда все другие вещи, которые загружены, а также, например, как изображения.

Так что ваш код становится:

$(window).load(function() { 
    for(var i=0; i < mineContor; i++){ 
        var img = $("img")[i]; 
        console.log(img.width); 
       } 
}); 
+3

Вы правы, как и многие другие ребята, которые ответили на вопрос ... Изображения не были полностью загружен :(Я собираюсь принять ответ cuz его первый за 8 минут. – OzZie

+0

Я использовал для хранения значений в массиве, и это выглядит как 240 240 240 404, что верно, но эти значения находятся в одном массиве, который меняет свое значение на позицию 0. Таким образом, массив заполняется только в позиции 0, а 1,2,3 пустые, если я перечисляю в том, что для массива [i] – OzZie

0

Попробуйте это: Написать свой код внутри $(function() который будет гарантировать, что все DOM структура готова. Затем повторите все изображения и вызовите метод .width(), который даст вам ширину каждого изображения.

$(function(){ 
    $('#showcase .showcase-content img').each(function(){ 
    console.log($(this).width()); 
    }); 
}); 

JSFiddle Demo

0

Это потому, что только $("img")[0] возвращает DOM-объект первого элемента изображения, происходящего, с шириной собственности. $("img")[1] и т. Д. Нет. [n] не возвращает следующее возникающее изображение, которое, я считаю, является тем, что вы думали. Кроме того, если вы хотите прокручивать каждое изображение, почему бы не использовать метод $.each() в jQuery?

$('#showcase img').each(function() { 
    console.log($(this).width()); 
}); 
1
$("img").each(function(){ 

console.log($(this).css("width")); 

    OR 

console.log($(this).width()); 
}); 

Demo

1

мне не нравится идея с вашей переменной mineContor.Это не очень гибкое решение. Я хотел бы предложить альтернативное решение без использования JQuery или любой внешней библиотеки:

// get all images (img) on the page 
var images = document.getElementsByTagName('img'); 
// iterate over the images and return the width for every single image 
for (var i = 0; i < images.length; i++) { 
    console.log((i + 1) + '. image has width ' + images[i].width + 'px'); 
} 

Это работает лучше и является более гибким, чем жесткое кодирование количество изображений в переменной.

РЕДАКТИРОВАТЬ:

Приведенный выше код был первоначально означало лишь в качестве дополнения к другим ответам в качестве альтернативы без JQuery и избежать жесткого кодирования переменной mineContor.

Изображения в документе могут считываться только после полной загрузки DOM.

https://developer.mozilla.org/en/docs/Web/API/GlobalEventHandlers/onload

Здесь идет расширение, показывающее, как реализовать пример кода на странице:

var getImageWidth = function() { 
    // declare all variables in the beginning 
    var images, i; 
    // get all images, it returns an HTMLCollection, an array-like object 
    images = document.getElementsByTagName('img'); 
    // iterate over the images and get the width for every one of them 
    console.log((i + 1) + '. image has width ' + images[i].width + 'px'); 
} 

// execute the function after the page has finished loading 
// important: no brackets after the function 
window.onload = getImageWidth; 

Адаптировать тело функции в соответствии с вашими потребностями либо перестановкой выход с console.log или по возвращая значения, возможно, как массив.

+0

Я хотел бы добавить код для другой галереи img, поэтому мне нужно знаю, как много imgs у меня есть! – OzZie

+0

Я только что увидел «images.length», который возвращает значение myContor. Вы правы, это хорошее решение. Спасибо! – OzZie

+0

@OzZie Именно это и есть смысл. код, не зная заранее, сколько изображения есть на странице. Первая строка кода в примере возвращает массив-подобный объект (HTMLCollection) элементов. Таким образом, он имеет свойство 'length' - значение, которое вы объявили вручную. – cezar

Смежные вопросы