innerHTML - по-разному работает в Опере, Сафаре и ФФ, ІЕ

yantar

Новичок
innerHTML - по-разному работает в Опере, Сафаре и ФФ, ІЕ

Есть в строке значение
<td id = "price">euro 123</td>


Код:
alert (document.getElementById("price").innerHTML);
в Опере и Сафари
дает
Код:
euro 123
а в ИЕ и ФФ пробелы меняются на мнемоники.
Код:
euro&nb sp;nb sp;123

Дальше интереснее.
Меняем мнемоники на пробелы и через регулярку вытягиваю валюту
Код:
price = price.replace(/&nb sp;/g, " ");
var pattern = /([a-zA-Z ]+)([0-9]+)/;
price.match(pattern);
alert (RegExp.$1);
В ИЕ и ФФ работает, в опере(сафари) нет. :(
Если создать объект стринг в опере с пробелами работает.


В ИЕ и ФФ длина строки считается з &nbsp; (каждый пробел - 6 символов)
В опере в длине строки пробел учитывается, как 1 символ, НО price.indexOF(" ") дает -1
Если задавать явное строкове значение с пробелами, тогда работает.

nbsp разделил пробелом, потому что скрипт съедает.
 

FB3

Новичок
Я бы сделал через DOM...
ИМХО, innerHTML - устаревший метод.
 

yantar

Новичок
2 Ironfoundersson
Ошибся при написании поста.
2 FB3
Попробую через ДОМ, но интересно, почему так криво выходит.

Кстати c либой jQuery тоже самое, видимо,что
$("#td_price").html() тоже юзает innerHTML
 

yantar

Новичок
Автор оригинала: MiRacLe
jQuery.text()
\
Возвращает одинаковый код и в фф и в опере (пробелы, а не мнемоники), НО
price.indexOf(" ") возвращает -1. Что за странніе пробелы ?
 

yantar

Новичок
2 kruglov
Делаю так
PHP:
var sChar=String.fromCharCode(160);
price = price.replace(sChar, " ", "g");
И в опере и в фф
price.indexOf(" ");
дает нормальный результат.
НО после рег.выражения - в опере пустая строка.
([a-zA-Z ]+)([0-9\.]+)
А если в строке задать явно пустое значение - работает. Может пробел, что в регулярном выражении и пробел в строке замены в опере не одинаковы.



Разобрался, надо было немного подправить рег.выражение и тогда можно не использовать замену 160 пробела на обыкновенный.
Пишем в рег.выражении \s
([a-zA-Z\s]+)([0-9\.]+)

В опере заработало, НО в сафари все равно не работает,
 

dimagolov

Новичок
yantar, а для чего ты вообще задался вопросом какие там в innerHTML пробелы - обычные или nbsp?
 

dimagolov

Новичок
по innerHTML броузеры возвращают то, как они поняли полученный HTML код и отрендерили его.
мой вопрос был в том, почему для тебя так принципиально знать как там представлены пробелы.
 

yantar

Новичок
Автор оригинала: dimagolov
по innerHTML броузеры возвращают то, как они поняли полученный HTML код и отрендерили его.
мой вопрос был в том, почему для тебя так принципиально знать как там представлены пробелы.
Увидел, что возвращают по-разному, а далее просто было интересно узнать почему именно так, как вытянуть их.

З.Ы. Конечно, я это мог сделать совсем по-другому, просто увидел эту проблему, хотел разобраться.

-~{}~ 24.09.08 19:06:

Открыл для себя то, что
var str = new String("111111111111");
str = str.replace("1", "2" ,"g");
i
var str = new String("111111111111");
str = str.replace(/1/g, "2");
это разный код.
Первый вариант работает только в ФФ

-~{}~ 24.09.08 19:36:

В связи с тем, что не работает флаг глобальности (3 параметр) возникает дурной вопрос.
Как сделать в строке замену одного символа на другой, если что в строке нам неизвестно. Проходиться по циклу, пока строка не пустая ?

var str = '121212121212';
var str_1 = '1';
var str_2 = '2';

str.replace(str_1, str_2, "g") - работает только в ИЕ.
а так понятно, что не работает
str.replace(/str_1/g, str_2)
 
Сверху