#jquery
#jquery
Вопрос:
Мне нужно применить функцию jQuery к a div
только в том случае, если span
элементы внутри нее переносятся. Я пытаюсь определить это с getClientRects()
помощью, но он всегда возвращает одну строку. Вы можете увидеть это во фрагменте ниже. Есть ли здесь что-то явно неправильное?
jQuery(function() {
var minimized_elements = $('.countLines');
var maxLines = 1;
minimized_elements.each(function() {
var lineCount = $(this)[0].getClientRects().length;
alert(lineCount);
});
});
div {
width: 70%;
background-color: #898989;
}
span {
display: inline-block;
width: 30%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="countLines">
<span>item 1</span><span>item 2</span><span>item 3</span><span>item 4</span><span>item 5</span><span>item 6</span>
</div>
Ответ №1:
Для достижения того, что вам требуется, вы можете вместо этого получить уникальный набор верхних позиций span
элементов. Оттуда вы можете подсчитать количество значений в этом наборе; это будет количество строк, которые пересекают промежутки. Попробуйте это:
jQuery($ => {
let lines = new Set($('.countLines span').map((i, el) => $(el).offset().top).get()).size;
console.log(lines);
});
div {
width: 70%;
background-color: #898989;
}
span {
display: inline-block;
width: 30%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="countLines">
<span>item 1</span><span>item 2</span><span>item 3</span><span>item 4</span><span>item 5</span><span>item 6</span>
</div>
Комментарии:
1. Большое спасибо, Рори! Это именно то, что мне было нужно.
Ответ №2:
Вот так: в чистом Javascript.
Это делается путем получения общей ширины всех элементов span. Затем мы сравниваем его с родительской шириной. Если ширина родительского элемента меньше общей ширины, мы определяем, что он переносится.
var el = document.querySelector(".countLines"),
span = el.querySelectorAll("span"),
totalWidth = 0;
span.forEach(span => totalWidth = span.clientWidth);
if (el.clientWidth < totalWidth) {
console.log("Wrapping!");
}
div {
width: 70%;
background-color: #898989;
}
span {
display: inline-block;
width: 30%;
}
<div class="countLines">
<span>item 1</span><span>item 2</span><span>item 3</span><span>item 4</span><span>item 5</span><span>item 6</span>
</div>
Комментарии:
1. Спасибо, что вы это написали. Для записи я попросил пример с использованием синтаксиса jQuery, поэтому я присудил Рори, но все равно еще раз спасибо.