powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (JavaScript) Непойму в чем разница в коде
25 сообщений из 26, страница 1 из 2
(JavaScript) Непойму в чем разница в коде
    #36228489
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В IE так вот работает:
Код: plaintext
1.
var a = NN.childNodes; var l = a.length;
for (var i =  0 ; i < l; i++) insobj.appendChild(a[ 0 ]);
А вот так не работает:
Код: plaintext
1.
var a = NN.childNodes; var l = a.length;
for (var i =  0 ; i < l; i++) insobj.appendChild(NN.childNodes[ 0 ]);
Всем остальным браузерам фиолетово как написано.
В чем тут грабля расскажите пожалуйста.
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36228671
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какую ошибку показывает эксплорер?
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36228691
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фул код на обозрение общественности. что есть NN? и что есть insobj?
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36228870
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EmilRegis
какую ошибку показывает эксплорер?

+1
Только, в контексте "информативности" сообщений от M$ IE, я бы лучше Mozilla FireFox -> Tools -> Error Console посмотрел...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36228906
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот сама функция, суть её обходить IE-шные глюки с innerHTML.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
function innerFunctIE (obj, html) {
	//Обход большого глюка IE.
    //http://msdn.microsoft.com/ru-ru/library/ms533897%28en-us,VS. 85 % 29 .aspx      
    var ro_tags = {COL: 1 ,  COLGROUP: 1 ,  FRAMESET: 1 ,  HEAD: 1 ,  HTML: 1 ,  STYLE: 1 ,  TABLE: 1 ,  TBODY: 1 ,  TFOOT: 1 ,  THEAD: 1 ,  TITLE: 1 ,  TR: 1 , SELECT: 1 };
	var insobj = obj;
	var old_html = new Date().getTime().toString();
	var NN;
    var CN = document.createTextNode(old_html);
	var i =  0 ;
    while(obj.tagName in ro_tags){
		//NN = obj.cloneNode(false);
		NN = document.createElement(obj.tagName);
		NN.appendChild(CN);
		CN = NN;
		obj = obj.parentNode;
		i++;
	}
	if (NN) {
		//NN = obj.cloneNode(false);
		NN = document.createElement(obj.tagName);
		NN.appendChild(CN);
		NN.innerHTML = NN.innerHTML.replace(old_html, html);
		for (j =  0 ; j < i; j++) NN = NN.firstChild;
		var child_node;
		//Все делаем через DOM методы, чтобы не покарежить нежные event-ы		
		while (insobj.firstChild) insobj.removeChild(insobj.firstChild);


		var a = NN.childNodes; var l = a.length;
		for (var i =  0 ; i < l; i++) insobj.appendChild(a[ 0 ]);


	} else obj.innerHTML = html;
}

Ошибок IE никаких не выдает. Просто неправильно работает.
Конкретный случай вставка с <OPTION> <SELECT> - ов.

Если, так:
Код: plaintext
1.
		var a = NN.childNodes; var l = a.length;
		for (var i =  0 ; i < l; i++) insobj.appendChild(a[ 0 ]);
То все как положенно.

Если, так:
Код: plaintext
1.
		var a = NN.childNodes; var l = a.length;
		for (var i =  0 ; i < l; i++) insobj.appendChild(NN.childNodes[ 0 ]);
То теряем атрибут selected и в разультате не то будет выбрано по умолчанию.
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36228917
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь за остальные браузеры, там другая ветка кода, там все по человечески:
Код: plaintext
1.
2.
function innerFunctAll (obj, html) {
	obj.innerHTML = html;
}

А инициализация делается так:

Код: plaintext
1.
2.
3.
4.
5.
6.
    var tbody = document.createElement('table');
    try {
        tbody.innerHTML = '<tr></tr>';
        innerFunct = innerFunctAll;
    } catch (e) {
        innerFunct = innerFunctIE;
    }
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36229378
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чушь какая-то, зачем такие костыли? неужели не обойтись без баловства с innerHTML там где не стоит?
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36229428
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NT Man...суть её обходить IE-шные глюки с innerHTML.
кстати, а про какие глюки речь?)
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36229533
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зы, Да чушь, да костыли и все из-за чего? Из-за того что в мире есть ущербный браузер имя которого IE. не хочу браузерного холивара, только на просторах сети и слышно нытье, что то это не работает, то то не работает и предлагаются ещё более костылявые не универсальные решения. Я создал универсальное решения и я этим горжусь. Единственное чего не понимаю это описанного момента. Думал здесь истинные гуру просветили бы в тонкости.

Korcarкстати, а про какие глюки речь?)
Так вы не в курсе?
1) Попробуйте через innerHTML вставить новый html код в таблицу (<table>).
2) попробуйте через innerHTML вставить новый html код в тэг <SELECT>
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36229674
EmilRegis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NT Man
1) Попробуйте через innerHTML вставить новый html код в таблицу (<table>).

в чём проблема? я вставлял))
правда там я помоему добавлял к tr
Код: plaintext
1.
2.
tr.innerHTML = '<td>asd</td>';
table.appendChild(tr);
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36229690
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
table и tr - элементы "только для чтения", через innerHTML их не редактируют. Да и зачем если есть целая куча методов (createElement+appendChild, insertRow+insertCell), с помощью которых это можно сделать цивилизованным путем?
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36229696
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таблицу и списки проще сгенерить целиком с внешним контейнером, чем в готовый <table> вставлять строки. Никакого удобства кроме лишнего гиморроя ты не получишь. Суть решаемой задачи и удобства неочевидна.
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36229738
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illion, зы, +1
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36229762
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
illiontable и tr - элементы "только для чтения", через innerHTML их не редактируют. Да и зачем если есть целая куча методов (createElement+appendChild, insertRow+insertCell), с помощью которых это можно сделать цивилизованным путем?

Сразу видно вы не имели дело с дизайнерами. Дизайнерам пофиг что там и куда нельзя закодить. Они сделают шаблон и пофиг. Моя функция кстати работает на этот пофиг. Лучше бы объяснили разницу.
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36229803
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а причем тут, собственно, дизайнеры? ну допустим (допустим!) они верстают тебе хтмл, чтобы сверстать таблицу им нужно хотя-бы пару строк в неё вставить, чтобы видеть как это отображается. Они что, дают тебе код с таблицей и парой тестовый строк, а ты в js их затираешь своими? или все-таки ты перерабатываешь то что они тебе сверстали под свои нужды? проблема все ещё неочевидна.
кстати для работы с дизайнерами есть ещё шаблоны и соответственно шаблонизаторы
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36230110
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зыа причем тут, собственно, дизайнеры? ну допустим (допустим!) они верстают тебе хтмл, чтобы сверстать таблицу им нужно хотя-бы пару строк в неё вставить, чтобы видеть как это отображается. Они что, дают тебе код с таблицей и парой тестовый строк, а ты в js их затираешь своими? или все-таки ты перерабатываешь то что они тебе сверстали под свои нужды? проблема все ещё неочевидна.
кстати для работы с дизайнерами есть ещё шаблоны и соответственно шаблонизаторы

Проблема в том что человеку неочевидены не человеческие проблемы в данном случае проблемы с убогим браузером. Опять флейм... Так в чем разница? Или здесь нет истинных гуру?
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36230179
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нече на зеркало пинять коль рожа крива (с)


по теме - напиши тестовый пример без своей говнофункции, в вырезанном куске проблема неочевидна.
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36230296
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NT Man, Вам же не говорят, не юзать таблицы совсем, Вам только советуют использовать другой подход при работе с ними, который наиболее надежен
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36230362
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KorcarNT Man, Вам же не говорят, не юзать таблицы совсем, Вам только советуют использовать другой подход при работе с ними, который наиболее надежен
Ну так если вы внимательно смотрели код, то так оно и работает для тэга <TABLE> и ещё для некторорых тэгов, которые перечисляются в переменной ro_tags, юзаются DOM методы, вы ведь нифига не разобрались в моем коде, а теперь говорите, что я что-то не так делаю. Вы сначала проникнитесь моим кодом и поймите, что он реально является панацеей от глючного недоделанного движка IE.
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36231904
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для работы с элементами страницы не обязательно создавать её копию
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36233439
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зыпо теме - напиши тестовый пример без своей говнофункции, в вырезанном куске проблема неочевидна.
[OFFTOPIC]Где ты тут увидел говнофункцию??[/OFFTOPIC]
Вот пример:

Смотрим что получается в IE потом комментируем две строчки под комментарием "Рабочий пример." и раскомментируем две строчки под комментарием не рабочий пример снова смотрим

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Тег SELECT</title>
    <script>
      function ggg() {
        var to = document.getElementById("bbb");
        var from = document.createElement('p');
        from.innerHTML = '<select> \
<option value="1">Чебурашка</option> \
<option selected value="2">Крокодил Гена</option> \
<option value="3">Шапокляк</option> \
<option value="4">Крыса Лариса</option> \
</select>';
        while (to.firstChild) to.removeChild(to.firstChild);
 
//      Рабочий пример.
        var a = from.firstChild.childNodes; var l = a.length;
        for (var i =  0 ; i < l; i++) to.appendChild(a[ 0 ]);
 
//      Не рабочий пример только для IE
//      var a = from.firstChild; var l = a.childNodes.length;
//      for (var i =  0 ; i < l; i++) to.appendChild(a.childNodes[ 0 ]);
 
      }
    </script>
  </head>
  <body>  
    <form action="select1.php" method="post">
    <p><select id="bbb" name="hero"></select></p>
  </form>
  <input type="button" value="ins select" onclick="ggg()"/>
  </body>
</html>

Обратите внимание на то, какой <option> будет выбран по умолчанию в первом и во втором случае.

Korcarдля работы с элементами страницы не обязательно создавать её копию
Извините, но вы явно не в теме этого глюка. Попробуй сделать в IE:
Код: plaintext
1.
var tbody = document.createElement('table');
tbody.innerHTML = '<tr></tr>';
Суть универсального workaround-а, что мы идем с помощью parentNode на родительский тэг и проверяем а он Read Only или нет, если Read Only, то идем дальше и так до первого тэга в который можно писать. Далее склеиваем полученную колбасу в результате такого обхода с новой колбасой и вставляем во временный элемент чтоб не запороть всякие динамически настроенные event-ы. И только уже после этого аккуратно средствами DOM переносим все вновь вставленное из временного элемента на боевой DOM. По другому в IE никак.
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36234162
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NT Man

Korcarдля работы с элементами страницы не обязательно создавать её копию
Извините, но вы явно не в теме этого глюка. Попробуй сделать в IE:
Код: plaintext
1.
var tbody = document.createElement('table');
tbody.innerHTML = '<tr></tr>';

это Вы не в теме того, что Вам отвечают. это делать не стоит по той простой причине, что <tr> - часть структуры элемента, когда innerHTML обеспечивает доступ к СОДЕРЖИМОМУ элемента
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36234179
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спешал фо Вас:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<html>

<head>
  <title></title>
</head>

<script>
  function add_table()
  {
     cnt=document.getElementsByName('cont')[ 0 ];
     var tb=document.createElement('table');
     var elbd=document.createElement('tbody');
     var eltr=document.createElement('tr');
     var eltd=document.createElement('td');
     eltd.innerHTML='735934';
     eltr.appendChild(eltd);
     elbd.appendChild(eltr);
     tb.appendChild(elbd);
     cnt.appendChild(tb);
  }
</script>

<body>

<div name=cont id=cont>qwere</div>
<input type=button value="add table" onclick="add_table();">
<input type=button value="alert" onclick="alert(document.getElementsByName('cont')[0].innerHTML);">


</body>

</html>
в IE работает.
и не изобретайте велосипед. это дело крайне неблагодарное :)
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36234240
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Korcar, опять вы исходите из того, что вам заранее известно, что рисовать! Моя задача стоит вставить в один неведомый html, кусок другого неведомого html. Вам не один дизайнер не будет программировать в JavaScript. Дизайнеры будут рисовать блоки html и им пофигу, что это нельзя вставить туда-то! И если вы хотите создать универсальный движок, то моя функции пока единственная в мире которая делает это.
...
Рейтинг: 0 / 0
(JavaScript) Непойму в чем разница в коде
    #36234311
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NT Man Моя задача стоит вставить в один неведомый html, кусок другого неведомого html.
это как? это значем? о_0 Вы не знаете что вставляете и куда это неизвестное поставить? Может тогда и ставить ничего никуда и не надо? никто ничего и не заметит)))

NT Man... то моя функции пока единственная в мире которая делает это.
ай-ай-ай, как не скромно)))
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (JavaScript) Непойму в чем разница в коде
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]