Я столкнулся с десятками сценариев, в которых html равен echo
'd вместо того, чтобы быть сохраненным. Мне интересно, если это вообще хорошая практика всегда хранения html в строке из-за гибкой природы?Должен ли я всегда хранить строку HTML вместо того, чтобы распечатывать ее части в разное время?
Случайный пример: у меня есть функция, которая возвращает html для динамической поднабора. Я печатая открытие Div тег, печатая ее содержимое, а затем печать конца DIV тега отдельно:
<div id="nav">
<?php echo $nav->getHTML();?>
</div>
Однако, теперь я должен назначить специальный класс для #nav
DIV, исходя из того количества элементов списка и суммы символов внутри $nav->getHTML()
превышает определенную сумму, чтобы отдельно назначать разные line-height
и height
. Для этого я должен загрузить его в DOMDocument
и использовать DOMXpath
и сделать некоторые оценки.
html = '<div id="nav">';
html.= $nav->getHTML();
dom = new DOMDocument(); // create a DOM tree
xpath = new DOMXpath($d); // create a DOM Xpath tree
// bunch of DOM querying/manipulation
html.= '</div>';
Я имею в виду, она не должна быть лучше, чтобы всегда хранить что-то вроде этого, чтобы сделать вещи более гибкими для будущих запросов, которые требуют манипуляций со строками? Или я просто бесполезно переделываю? Или, возможно, я собираюсь сделать это неправильно, и мне нужно реорганизовать мой класс, чтобы выполнять запрос DOM внутри, а не снаружи?
EDIT: После того как я определить, будет ли ul
охватывать несколько строк (это горизонтальный список), основанный на пределе символов (скажем, 200), я добавлю специальный класс к #nav
пункта и с тех пор на стилистике в CSS.
Отказ от ответственности: Я вообще не хочу полагаться на JS. Я знаю, что могу решить эту проблему, но я хочу, чтобы она немедленно отображалась правильно.
Решая это чисто с CSS не представляется возможным. Я динамически манипулировать абсолютно позиционированный 'ul', который должен придерживаться нижней части другого элемента. Если есть несколько строк' li ', тогда мне нужно изменить высоту и высоту строки' ul'. Это также должно быть совместимо с несколькими браузерами Я не могу динамически «знать», если «ul» охватывает несколько строк или нет с чисто CSS. –
Почему бы и нет? бс. расположенный внизу, требует дна: 0; он не требует высоты. Если вы установили какой-то умный стиль (display: inline-block; overflow: auto; в UL и float: left; в LI), тогда li должен завернуться в новую строку, как если бы они были словами в абзаце, а ваш ul сохранит высоту жидкости. Вы также можете использовать jQuery для помощи в визуальных вычислениях, добавляя каждый li в UL, пока их общая расчетная ширина меньше ширины ul и соответственно умножает высоту ul. – dmrnj