Мне интересно, есть ли способ, например, подсчитать строки внутри div. Скажем, у нас есть такой div:
<div id="content">hello how are you?</div>
В зависимости от многих факторов, div может содержать одну, две или даже четыре строки текста. Есть ли способ узнать об этом сценарий?
Другими словами, представлены ли вообще автоматические разрывы в DOM?
javascript
html
dom
Бути-окса
источник
источник
line-height
(который явно не установлен) - это использоватьwindow.getComputedStyle(element, null).getPropertyValue('line-height')
Одно из решений - заключить каждое слово в тег span с помощью скрипта. Затем, если размер Y данного тега span меньше, чем у его непосредственного предшественника, произошел разрыв строки.
источник
Обратите внимание на функцию getClientRects (), которую можно использовать для подсчета количества строк в элементе. Вот пример того, как его использовать.
Он возвращает объект DOM javascript. Количество строк можно узнать следующим образом:
Он может возвращать высоту каждой строки и многое другое. Посмотрите полный набор вещей, которые он может делать, добавив это в свой скрипт, а затем заглянув в журнал консоли.
Хотя следует отметить несколько моментов, это работает, только если содержащий элемент является встроенным, однако вы можете окружить содержащий встроенный элемент блочным элементом для управления шириной следующим образом:
Хотя я не рекомендую жестко кодировать такой стиль. Это просто для примера.
источник
Меня не устроили ответы здесь и на другие вопросы. Самый высокий рейтинг ответ не принимает
padding
илиborder
во внимание, и поэтому очевидно , игнорируетbox-sizing
, а также. Мой ответ сочетает в себе некоторые методы здесь и в других темах, чтобы получить решение, которое удовлетворит меня.Это не идеально: когда не удалось получить числовое значение для
line-height
(например,normal
илиinherit
), оно просто используетfont-size
умноженное на1.2
. Возможно, кто-то другой может предложить надежный способ определения значения пикселя в таких случаях.Помимо этого, он смог правильно обрабатывать большинство стилей и случаев, которые я ему использовал.
jsFiddle для игры и тестирования. Также в строке ниже.
источник
Клонируйте объект-контейнер и напишите 2 буквы и вычислите высоту. Это возвращает реальную высоту со всеми примененными стилями, высотой строки и т. Д. Теперь рассчитайте высоту объекта / размер буквы. В JQuery высота превышает отступы, поля и границу, здорово вычислить реальную высоту каждой строки:
Если вы используете редкий шрифт с разной высотой каждой буквы, это не сработает. Но работает со всеми обычными шрифтами, такими как Arial, mono, comics, Verdana и т. Д. Проверьте свой шрифт.
Пример:
Результат:
6 Lines
Работает во всех браузерах без редких нестандартных функций.
Проверить: https://jsfiddle.net/gzceamtr/
источник
clone
→cloneNode
,hide
→style.visibility = "hidden"
,html('a<br>b')
→textContent='a\r\nb'
,appendTo('body')
→document.documentElement.appendChild
,height()
→getBoundingClientRect().height
Для тех, кто использует jQuery http://jsfiddle.net/EppA2/3/
источник
$(selector).css('line-height');
, вы не получите число из этой функции.Я убежден, что сейчас это невозможно. Хотя это было.
Реализация getClientRects в IE7 сделала именно то, что я хочу. Откройте эту страницу в IE8, попробуйте обновить ее, меняя ширину окна, и посмотрите, как соответственно изменится количество строк в первом элементе. Вот ключевые строки javascript с этой страницы:
К сожалению, для меня Firefox всегда возвращает один клиентский прямоугольник на элемент, и IE8 теперь делает то же самое. (Страница Мартина Хоннена работает сегодня, потому что IE отображает ее в представлении совместимости IE; нажмите F12 в IE8, чтобы поиграть в разных режимах.)
Это печально. Похоже, что буквальная, но бесполезная реализация спецификации Firefox в очередной раз победила полезную реализацию Microsoft. Или мне не хватает ситуации, когда новый getClientRects может помочь разработчику?
источник
на основе ответа GuyPaddock сверху, это, похоже, работает для меня
Хитрость здесь в том, чтобы увеличить высоту строки настолько, чтобы она «поглотила» любые различия браузера / ОС в способе отображения шрифтов.
Проверил его с помощью различных стилей и разных размеров / семейств шрифтов. Единственное, что он не принимает во внимание (поскольку в моем случае это не имело значения), это отступы, которые можно легко добавить в решение.
источник
Нет, не достоверно. Просто слишком много неизвестных переменных
Этот список можно продолжить. Я надеюсь, что когда-нибудь появится такой метод надежного решения этой задачи с помощью JavaScript, но пока не наступит этот день, вам не повезло.
Я ненавижу такие ответы и надеюсь, что кто-нибудь сможет доказать, что я неправ.
источник
Вы должны иметь возможность разделить ('\ n'). Length и получить разрывы строк.
обновление: это работает в FF / Chrome, но не в IE.
источник
getClientRects
вернуть клиентские прямоугольники, подобные этому, и если вы хотите получить строки, используйте следующую функцию, подобную этойисточник
Я нашел способ вычислить номер строки при разработке редактора html. Основной метод заключается в следующем:
В IE вы можете вызвать getBoundingClientRects, он возвращает каждую строку в виде прямоугольника
В webkit или новом стандартном движке html он возвращает каждый элемент или клиентские прямоугольники узла, в этом случае вы можете сравнить каждый прямоугольник, я имею в виду, что каждый прямоугольник должен быть самым большим, поэтому вы можете игнорировать те прямоугольники, высота которых меньше (если есть верхняя часть прямоугольника меньше его, а нижняя больше его, условие верно.)
так что посмотрим результат теста:
Зеленый прямоугольник - это самый большой прямоугольник в каждой строке.
Красный прямоугольник - граница выделения.
Синий прямоугольник - это граница от начала до выделения после расширения, мы видим, что он может быть больше красного прямоугольника, поэтому мы должны проверять нижнюю часть каждого прямоугольника, чтобы ограничить ее размер, меньший, чем нижняя часть красного прямоугольника.
источник
Попробуйте это решение:
Вы можете увидеть это в действии здесь: https://jsfiddle.net/u0r6avnt/
Попробуйте изменить размер панелей на странице (чтобы сделать правую часть страницы шире или короче), а затем запустите его еще раз, чтобы убедиться, что он может достоверно определить количество строк.
Эта проблема сложнее, чем кажется, но большая часть трудностей возникает из двух источников:
Рендеринг текста в браузерах слишком низкоуровневый, чтобы его можно было напрямую запрашивать из JavaScript. Даже псевдоселектор CSS :: first-line ведет себя не так, как другие селекторы (вы не можете инвертировать его, например, чтобы применить стиль ко всем, кроме первой строки).
Контекст играет большую роль в том, как вы рассчитываете количество строк. Например, если высота строки не была явно установлена в иерархии целевого элемента, вы можете получить "нормальный" обратно как высоту строки. Кроме того, элемент может использоваться
box-sizing: border-box
и, следовательно, подлежать заполнению.Мой подход сводит к минимуму № 2, беря под контроль высоту строки напрямую и принимая во внимание метод определения размера блока, что приводит к более детерминированному результату.
источник
В определенных случаях, например, если ссылка занимает несколько строк в не выровненном тексте, вы можете получить количество строк и каждую координату каждой строки, используя это:
https://developer.mozilla.org/en-US/docs/Web/API/Element/getClientRects
Это работает, потому что каждая строка даже немного отличается. Пока они есть, они отображаются средством визуализации как другой «прямоугольник».
источник
Следуя предложению @BobBrunius 2010, я создал это с помощью jQuery. Несомненно, это можно улучшить, но некоторым это может помочь.
источник
Вы можете сравнить высоту элемента и высоту элемента с помощью
line-height: 0
источник