Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > innerText в Гекко с переносами строк


Автор: Burrr 9.10.2006, 14:35
Нужен был код, для показа innerHTML и innerText узлов, накидал такую штуку:
Код
<body>
<div id="container">First string<br>Second string<br>Third string<br></div>
<script type="text/javascript">
var container = document.getElementById("container");
var text, html;
if (container.innerText) {
    text = container.innerText;
    html = container.innerHTML;
} else {
    text = document.createRange();
    text.selectNodeContents(container);
    text = text.toString();
    html = container.innerHTML;
}
alert("Text: ==============\n" + text + "\nHTML: ====================\n" + html);
</script>
</body>


HTML-код везде показывается правильно, а вот с innerText проблема. В ИЕ всё показывается правильно:
Код
First string
Second string
Third string

, а вот в Файрфоксе (и Гекко в целом) переносы строк съедаются и осображается вот такая строка:
Код
First stringSecond stringThird string


Помогите решить проблему! Как её побороть в целом, есть ли такие методы в Гекко, которые не съедают переносы строк?
Заменой пользоваться сложно, т.к. вместо <br> могут стоять <br/> и <p></p>
 smile 

Автор: skyboy 9.10.2006, 15:05
если я правильно понимаю, вторая ветка в if - это как раз для Геко, который не понимает innerText, да? Если так, то по логике работы все зависит от того, как происходит перевод  для "<br>" вызов toString(). А он, как мне кажется, возвращает не "\n", a "". Потому без допонительных функций тут не обойтись.
А зачем вообще получать innerText?

Автор: Burrr 9.10.2006, 15:12
skyboy, ты правильно понял проблему, но возможно есть способ не только через range -> selectNodeContents -> toString(), а еще какой-то. Очень нужно!

Цитата
А зачем вообще получать innerText?

Нужно, в рамках подзадачи более крупного проекта.

Автор: Zeroglif 9.10.2006, 22:35
Цитата(Burrr @  9.10.2006,  14:35 Найти цитируемый пост)
Помогите решить проблему

В принципе, если среда стабильная/безопасная можно бы и регулярное написать под возможные варианты. 

Ну, или так:

Код

    text = 
        function (n) {
            for (var t = [], l = (c = n.childNodes).length, p, i = 0; i < l; i++) {
               t[t.length] = 
                   'p' == (p = c[i].nodeName.toLowerCase()) 
                       ? '\n' + c[i].textContent + '\n' 
                       : 'br' == p
                           ? '\n'
                           : c[i].textContent;
            } 
            return t.join(''); 
        }(container);


Автор: Burrr 10.10.2006, 10:08
Zeroglif, спасибо!
+1

Автор: Sardar 11.10.2006, 15:28
А разве просто textContent не возвращает \n для <br>'а?

Автор: Burrr 11.10.2006, 15:38
Цитата
А разве просто textContent не возвращает \n для <br>'а?

К сожалению.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)