Вставляя новую строку в пред тег (IE, JavaScript)

Вы можете переместить if до cy.get, чтобы ваша логика больше не была вложена в .each

const els = cy.get(...)
if (something) {
  cy.then(() => els.should('not.contain', contactID))
} else {
  els.each(...)
}

14
задан Itay Maman 12 October 2008 в 11:29
поделиться

9 ответов

Эти отчет об ошибках quirksmode.org и комментарии о innerHTML поведении Internet Explorer могли помочь:

" IE применяется нормализация HTML к данным, которые присвоены innerHTML свойству. Это вызывает неправильный дисплей пробела в элементах, которые должны сохранить форматирование, такое как < pre> и < textarea>. "

12
ответ дан 1 December 2019 в 07:52
поделиться

Это работает в IE?

document.getElementById("putItHere")
    .appendChild(document.createTextNode("first line\nsecond line"));

я протестировал его с Firefox, и это работает. :-)

5
ответ дан 1 December 2019 в 07:52
поделиться

Обходное решение может быть найдено на странице, связанной с в принятом ответе. Для простоты использования здесь это:

if (elem.tagName == "PRE" && "outerHTML" in elem)
{
    elem.outerHTML = "<PRE>" + str + "</PRE>";
}
else
{
    elem.innerHTML = str;
}
5
ответ дан 1 December 2019 в 07:52
поделиться

<br/> shoud только производят одну строку во всех браузерах. Конечно, удалите \n также, код должен быть:

document.getElementById("putItHere").innerHTML = "first line<br/>second line";
4
ответ дан 1 December 2019 в 07:52
поделиться

Содержание в эти <pre> тег нельзя считать HTML.

На самом деле, точка <pre> тег - то, так, чтобы это действительно отобразило форматированный текст.

Используя innerText свойство корректный способ изменить содержание <pre> тег.

document.getElementById("putItHere").innerText = "first line\nsecond line";
2
ответ дан 1 December 2019 в 07:52
поделиться

Я считаю это.

то, Что я нашел, было IE, использует \r\n, и Fx (другие) использует \n

var newline;
if ( document.all ) newline = '\r\n';
else newline = '\n';

var data = 'firstline' + newline + 'second line';
document.getElementById("putItHere").appendChild(document.createTextNode(data));

Для TinyMCE (WYSIWYG-редактор) плагин, который я когда-то сделал, я закончил с использованием BR i режимов редактирования и вымылся, это на отправляет и т.д.

Этот код циклы через все элементы BR внутри ПРЕД элементы, и заменяет BR новыми строками.

Примечание, что код полагается на TinyMCE API, но может легко быть написан с помощью стандартного JavaScript.

Вымойтесь:

        var br = ed.dom.select('pre br');
        for (var i = 0; i < br.length; i++) {
          var nlChar;
          if (tinymce.isIE)
            nlChar = '\r\n';
          else
            nlChar = '\n';

          var nl = ed.getDoc().createTextNode(nlChar);
          ed.dom.insertAfter(nl, br[i]);
          ed.dom.remove(br[i]);
        }

Удачи!

2
ответ дан 1 December 2019 в 07:52
поделиться
if (typeof div2.innerText == 'undefined')
    div2.innerHTML = value;
else
    div2.innerText = value;

это работало на меня.

0
ответ дан 1 December 2019 в 07:52
поделиться

Я обнаружил, что innerHTML обрабатывается до его применения к элементу, поэтому
становится новой строкой и удаляются несколько пробелов.

Чтобы сохранить необработанный текст, необходимо например, используйте nodeValue;

document.getElementById('pre_id').firstChild.nodeValue='    white space \r\n ad new line';
0
ответ дан 1 December 2019 в 07:52
поделиться

Если вы не хотите использовать externalHTML, вы также можете сделать следующее для IE, если дополнительный предварительный тег не является проблемой:

 if(isIE)
     document.getElementById("putItHere").innerHTML = "<pre>" + content+"</pre>";
 else
     document.getElementById("putItHere").innerHTML = content;
1
ответ дан 1 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

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