текст jQuery () вызов сохраняет новые строки в Firefox, но не в IE

Я закончил поиском и вызвал магическую функцию, которая зарегистрирована для выполнения запросов Athena в расширении jupyter-athena-sql, следующим образом:

athena = get_ipython().find_cell_magic('athena')

df = athena("""select col1, count(*)
from my_table
group by col1""")
12
задан cletus 18 March 2009 в 00:58
поделиться

3 ответа

Похоже, что это - моя проблема: причуда Internet Explorer innerHTML:

Однако innerHTML имеет проблему в Internet Explorer.

Стандарт HTML требует преобразования, демонстрирующегося из содержания. Все виды и количества смежного пробела сворачиваются в одиночный пробел. Это - хорошая вещь - так же, как пример, это позволяет мне добавлять много разрывов строки в этот исходный файл, не имея необходимость волноваться о странных разрывах строки в отображаемом тексте.

Internet Explorer применяет эти преобразования на присвоение на innerHTML свойство. Это походит на хорошую идею: это экономит немного времени во время дисплея, потому что, если представление в оперативной памяти уже нормализовано, то браузер не должен нормализовать каждый раз, когда это должно отобразить текст.

Существуют исключения к правилу нормализации, все же. В частности, это <текстовая область> элемент, <пред> элемент и, в осведомленных о CSS браузерах, элементах с любым значением, но нормальный для пробельного свойства.

Internet Explorer не уважает эти особые случаи. Третье делает их оптимизацию плохой идеей, потому что пробел мог бы измениться во времени выполнения, например, через DOM. В любом случае Internet Explorer нормализует все присвоения на innerHTML свойство, таким образом вызывая эффект, продемонстрированный ниже.

Этот текст заполняет текстовую область при загрузке страницы. Это также содержит разрывы строки и несколько пробелов. Форматирование сохраняется здесь также, за исключением того, что UA может повредить строки.

(добавленный акцент)

И действительно если я изменяю его на:

<div id="div">
<pre>
...
</pre>
</div>

и

$("#div pre").text()

или просто:

<style type="text/css">
#div { white-space: pre }
</style>

все это волшебно работает.

17
ответ дан 2 December 2019 в 05:28
поделиться

Не уверенный, если это помогло бы, но возможно Вы могли бы попробовать это:

#div {
  white-space: pre;
}
8
ответ дан 2 December 2019 в 05:28
поделиться

Посмотрите здесь для обходного решения:

Взлом должен сначала клонировать элемент, из которого Вы хотите содержание, с помощью cloneNode ().

Затем Вы создаете a <pre> элемент с createElement (), и затем добавляет Ваш клонированный узел к нему.

Теперь можно добраться, innerText этого создают <pre> элемент, и просто удаляет временные объекты. У Вас теперь есть сохраненный текст пробела :)

var cloned = targetElement.cloneNode(true);
var pre = document.createElement("pre");
pre.appendChild(cloned);
var textContent = pre.textContent ?
  pre.textContent : pre.innerText;
delete pre;
delete cloned;

Причина я клонирую элемент, состоит в том, потому что appendChild () вытащил бы его из DOM, и это - боль перевставка назад в правильном положении в DOM.

Надо надеяться, это помогает нескольким людям там :)

3
ответ дан 2 December 2019 в 05:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: