2012-02-06 3 views
1

Я не уверен, что лучший способ описать это. Но я нахожу ширину изображения, и если он меньше 200px, он применяет класс ниже 200 для родительского div.jquery < than and > than .width

$('.content').find('img').each(function() { 
    var $this = $(this), width = $this.width(); 
     if (width < 200) { 
     $(this).parents('.container').addClass('under-200'); 
     } 
}); 

CSS: .container.under-200 {width: 200px}

Это прекрасно работает, но у меня возникают трудности с применением ширины с большими изображениями.

Для изображения размером 600 пикселей jquery применяет ширину 600 пикселей к родительскому div, или изображение 434px применяет ширину 434 пикселей к родительскому div.

+1

@ Cadence96 Если вам нужен только прямой родитель, да, это parent(). Если вы хотите продолжить движение вверх, это родители() (или ближайший()) –

ответ

1

Попробуйте это:

$(this).parents('.container').css("width", width); 

Кроме того, используйте .closest() вместо .parents().

.parents() будет проходить через DOM до корневого элемента, HTML и затем фильтровать результат на основе вашего селектора. .closest(), с другой стороны, остановится, как только будет найдена совпадение.

Вы можете кипеть весь код до одной строки:

$(this).closest('.container').css("width", (width < 200 ? 200 : width)); 

Надеется, что это помогло!

+0

Простой и понятный! Большое спасибо. '.closest()' должен быть быстрее '.parents()'. Еще раз спасибо. – uriah

0

width() имеет setter form, так что вы можете написать:

$(".content img").each(function() { 
    var $this = $(this), 
     $containers = $this.parents(".container"), 
     width = $this.width(); 
    if (width < 200) { 
     $containers.addClass("under-200"); // Set class. 
    } else { 
     $containers.width(width);   // Set width. 
    } 
}); 
+0

Спасибо за помощь Фредерик, очень легко. – uriah

0

Может быть, вы должны разбора «ширина» на межд? так что

if (width < 200) 

работы и только возвращает истину, если ширина действительно меньше, чем 200. Я могу себе представить, что она теперь всегда возвращает истину, так как ширина строка?

+0

['.width()'] (http://api.jquery.com/width/) возвращает номер .. –

+0

'.width()' возвращает число. (во-вторых, движение) * Метод .width() рекомендуется, когда необходимо использовать ширину элемента в математическом вычислении. * http://api.jquery.com/width/ – Joseph

+0

Я знал, что он не возвращает единиц, но это всегда Integer, т. е. никогда не String или Float? Однако поплавок не должен быть проблемой. –

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