Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Кривое отображение в IE, Opera, Chrom (https://javascript.ru/forum/css-html/21416-krivoe-otobrazhenie-v-ie-opera-chrom.html)

kingrus 08.09.2011 15:20

Кривое отображение в IE, Opera, Chrom
 
Добрый день всем! Возникла проблема с отображением xml каталога в браузерах IE, Chrom, Opera.

FireFox выводит корректно. Проблема, по моему, заключается в том, что не переносится строка в ячейке таблицы, и не понятно мне почему.

Вот код

<script type="text/javascript">
/*var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }*/
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
  }
xmlhttp.open("GET","http://allaboutfishing.ru/laserhp.xml", false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 
document.write("<table width='600' class='tableXml' cellspasing='0' border='0'><tr><td width='80'>Модель</td><td width='230'>Совместимость</td><td width='75'>Ресурс(стр.)</td><td width='75'>Вес, кг</td><td width='100'>Габариты, мм</td></tr>");
var x=xmlDoc.getElementsByTagName('LASER');
for (i=0;i<x.length;i++)
  { 
  document.write("<tr><td valign='top'>");
  document.write(x[i].getElementsByTagName("MODEL")[0].childNodes[0].nodeValue+"</td><td valign='top' >");
  //document.write("</td><td valign='top' >");
  document.write(x[i].getElementsByTagName("COMPATIBILITY")[0].childNodes[0].nodeValue);
  document.write("</td><td valign='top'>");
  document.write(x[i].getElementsByTagName("RESURS")[0].childNodes[0].nodeValue);
  document.write("</td><td valign='top'>");
  document.write(x[i].getElementsByTagName("WEIGHT")[0].childNodes[0].nodeValue.substring(0,5));
  document.write("</td><td valign='top'>");
  document.write(x[i].getElementsByTagName("SIZE")[0].childNodes[0].nodeValue);
  document.write("</td></tr>");
  }
document.write("</table>");
</script>


Результат можете глянуть по адресу тут . Скрипт не под этот сайт делается. На этот сайт чисто для примера поставил.
Результат во всех браузерах должен быть такой же как и в Moziila FF

Буду очень благодарен помощи. Нужно срочно, а разобраться сам, что-то не могу.

kingrus 09.09.2011 09:52

Поможет кто - нибудь ? )

crayday 09.09.2011 10:42

Мне тоже пока непонятно, почему =)) Но я заинтригован. Посмотрю попозже, если раньше ответ не будет найден.

kingrus 09.09.2011 11:06

Мое предположение, что более корректно было-бы выводить все с помощью innerHTML, в заранее подготовленный див. Т.е. сначала этот див определить, а потом с помощью иннера пихнуть туда данные. Может быть с document.write браузеры не видят каркас...

И еще, пробовал указывать width td и в px и в %, результата тоже не дало. На изменение высоты td - браузеры реагируют, а на изменение ширины - нет...

ваый 09.09.2011 11:40

document.write! Я не понимаю, откуда все новички набираются этой отвратительнейшей хрени - использовать document.write. Забудьте про это вообще. innerHTML..

kingrus 09.09.2011 12:16

так проблема в том, что документ врайт ? Ок, а если мы имеем 1 див, в который должны пихать данные, и в цикле у меня должно быть только <tr><td></td></tr> , а <table> и </table> выводить нужно до и после цикла. А с помощью чего <table> вывести в тот же див? Вроде же нельзя выводить в один и тот же див несколько inner.HTML или я ошибаюсь?

kingrus 09.09.2011 13:32

Проблема заключалась в неправильно оформленном xml. Были длинные названия строчек, браузер считал за одно слово и не переносил. Но проблема осталась в IE, пока по непонятным прчинам

Триви 09.09.2011 14:08

Цитата:

Сообщение от ваый (Сообщение 125711)
document.write! Я не понимаю, откуда все новички набираются этой отвратительнейшей хрени - использовать document.write. Забудьте про это вообще. innerHTML..

Прекрасно понимаю откуда..
Думают, что это как серверный скрипт, которому всё равно что генерить))

crayday 09.09.2011 16:05

Цитата:

Сообщение от kingrus (Сообщение 125736)
Проблема заключалась в неправильно оформленном xml. Были длинные названия строчек, браузер считал за одно слово и не переносил. Но проблема осталась в IE, пока по непонятным прчинам

То есть сейчас проблема считается решённой, скажем, в Хроме? У меня в хроме по-прежнему то же самое показывается.

Таблица содержит очень длинные фразы в ячейках, не разделённые пробелами. Слово, не разделённое пробелами, по умолчанию, не разбивается браузером. В этом случае для ячеек следует указывать css-свойство:
Код:

td {
word-break: break-all; /* разбивать по буквам */
}

http://www.w3.org/TR/css3-text/#word-break0

Ну, и document.write, как и .innerHTML, разумеется, к вопросу не имеют никакого отношения.


Часовой пояс GMT +3, время: 01:51.