У меня есть коллекция элементов блока на странице. Все они имеют CSS-правила пробела, переполнения, переполнения текста, так что переполняемый текст обрезается и используется многоточие.
Однако не все элементы переполнены.
Есть ли в любом случае я могу использовать JavaScript, чтобы обнаружить, какие элементы переполнены?
Спасибо.
Добавлено: пример структуры HTML, с которой я работаю.
<td><span>Normal text</span></td>
<td><span>Long text that will be trimmed text</span></td>
Элементы SPAN всегда помещаются в ячейки, к ним применено правило многоточия. Я хочу определить, когда многоточие применяется к текстовому содержимому SPAN.
javascript
html
css
ellipsis
deanoj
источник
источник
Ответы:
Когда-то мне нужно было это делать, и единственное надежное решение для разных браузеров, с которым я столкнулся, - это хакерская работа. Я не самый большой поклонник подобных решений, но это, безусловно, дает правильный результат снова и снова.
Идея состоит в том, что вы клонируете элемент, удаляете любую ограничивающую ширину и проверяете, шире ли клонированный элемент, чем оригинал. Если так, то вы знаете, что оно будет усечено.
Например, используя jQuery:
Я сделал jsFiddle, чтобы продемонстрировать это, http://jsfiddle.net/cgzW8/2/
Вы даже можете создать свой собственный псевдоселектор для jQuery:
Тогда используйте это, чтобы найти элементы
Демо: http://jsfiddle.net/cgzW8/293/
Надеюсь, это поможет, хакер как это.
источник
white-space: nowrap
.Попробуйте эту функцию JS, передав элемент span в качестве аргумента:
источник
text-overflow:ellipsis
этом должно бытьe.offsetWidth <= e.scrollWidth
Добавив к ответу итало, вы также можете сделать это с помощью jQuery.
Также, как указал Смоки, вы можете использовать jQuery outerWidth () вместо width ().
источник
Для тех, кто использует (или планирует использовать) принятый ответ от Кристиана Варги, пожалуйста, помните о проблемах производительности.
Клонирование / манипулирование DOM таким образом приводит к переворачиванию DOM (см. Объяснение перекомпоновки DOM ), которое является чрезвычайно ресурсоемким.
Использование решения Кристиана Варги для более 100 элементов на странице вызвало 4-секундную задержку переформатирования, во время которой поток JS заблокирован. Учитывая, что JS является однопоточным, это означает значительную задержку UX для конечного пользователя.
Итало Borssatto в ответ должен быть приемлемым один, это было примерно в 10 раз быстрее , во время моего профилирования.
источник
mouseenter
чтобы увидеть, должна ли отображаться подсказка.Ответ от итало очень хороший! Однако позвольте мне немного уточнить это:
Кросс-браузерная совместимость
Если, на самом деле, вы попробуете приведенный выше код и будете использовать
console.log
для распечатки значенийe.offsetWidth
иe.scrollWidth
, в IE вы заметите, что, даже если у вас нет усечения текста, возникает разница в значениях1px
или2px
.Таким образом, в зависимости от размера шрифта, который вы используете, допускайте определенный допуск!
источник
elem.offsetWdith VS ele.scrollWidth Это работа для меня! https://jsfiddle.net/gustavojuan/210to9p1/
источник
Этот пример показывает всплывающую подсказку на ячейке таблицы с усеченным текстом. Динамически зависит от ширины таблицы:
Демо: https://jsfiddle.net/t4qs3tqs/
Работает на всех версиях jQuery
источник
Я думаю, что лучший способ обнаружить это - использовать
getClientRects()
, кажется, что каждый прямоугольник имеет одинаковую высоту, поэтому мы можем рассчитать количество строк с количеством различныхtop
значений.getClientRects
работа , как этоgetRowRects
работа , как этовы можете обнаружить, как это
источник
Все решения на самом деле не работает для меня, то , что сделал работа сравнивать элементы
scrollWidth
сscrollWidth
его родителем (или ребенка, в зависимости от того, какой элемент имеет триггер).Когда ребенок
scrollWidth
выше своих родителей, значит, он.text-ellipsis
активен.Когда
event
родительский элементКогда
event
дочерний элементисточник
e.offsetWidth < e.scrollWidth
Решение не всегда работает.И если вы хотите использовать чистый JavaScript, я рекомендую использовать это:
(машинопись)
источник
Решение @ItaloBorssatto идеально подходит. Но прежде чем смотреть на SO - я принял решение. Вот :)
источник
Моя реализация)
источник
в демоверсии есть некоторые опущения http://jsfiddle.net/brandonzylstra/hjk9mvcy/, упомянутые https://stackoverflow.com/users/241142/iconoclast .
в его демо, добавить эти коды будет работать:
источник