Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (JavaScript) Непойму в чем разница в коде / 25 сообщений из 26, страница 1 из 2
01.10.2009, 22:43
    #36228489
NT Man
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
В 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
02.10.2009, 06:59
    #36228671
EmilRegis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
какую ошибку показывает эксплорер?
...
Рейтинг: 0 / 0
02.10.2009, 07:32
    #36228691
Korcar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
фул код на обозрение общественности. что есть NN? и что есть insobj?
...
Рейтинг: 0 / 0
02.10.2009, 10:07
    #36228870
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
EmilRegis
какую ошибку показывает эксплорер?

+1
Только, в контексте "информативности" сообщений от M$ IE, я бы лучше Mozilla FireFox -> Tools -> Error Console посмотрел...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
02.10.2009, 10:20
    #36228906
NT Man
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
Вот сама функция, суть её обходить 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
02.10.2009, 10:22
    #36228917
NT Man
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
Извиняюсь за остальные браузеры, там другая ветка кода, там все по человечески:
Код: 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
02.10.2009, 12:46
    #36229378
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
чушь какая-то, зачем такие костыли? неужели не обойтись без баловства с innerHTML там где не стоит?
...
Рейтинг: 0 / 0
02.10.2009, 12:58
    #36229428
Korcar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
NT Man...суть её обходить IE-шные глюки с innerHTML.
кстати, а про какие глюки речь?)
...
Рейтинг: 0 / 0
02.10.2009, 13:35
    #36229533
NT Man
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
зы, Да чушь, да костыли и все из-за чего? Из-за того что в мире есть ущербный браузер имя которого IE. не хочу браузерного холивара, только на просторах сети и слышно нытье, что то это не работает, то то не работает и предлагаются ещё более костылявые не универсальные решения. Я создал универсальное решения и я этим горжусь. Единственное чего не понимаю это описанного момента. Думал здесь истинные гуру просветили бы в тонкости.

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

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

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

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


по теме - напиши тестовый пример без своей говнофункции, в вырезанном куске проблема неочевидна.
...
Рейтинг: 0 / 0
02.10.2009, 18:46
    #36230296
Korcar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
NT Man, Вам же не говорят, не юзать таблицы совсем, Вам только советуют использовать другой подход при работе с ними, который наиболее надежен
...
Рейтинг: 0 / 0
02.10.2009, 19:47
    #36230362
NT Man
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
KorcarNT Man, Вам же не говорят, не юзать таблицы совсем, Вам только советуют использовать другой подход при работе с ними, который наиболее надежен
Ну так если вы внимательно смотрели код, то так оно и работает для тэга <TABLE> и ещё для некторорых тэгов, которые перечисляются в переменной ro_tags, юзаются DOM методы, вы ведь нифига не разобрались в моем коде, а теперь говорите, что я что-то не так делаю. Вы сначала проникнитесь моим кодом и поймите, что он реально является панацеей от глючного недоделанного движка IE.
...
Рейтинг: 0 / 0
05.10.2009, 07:46
    #36231904
Korcar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
для работы с элементами страницы не обязательно создавать её копию
...
Рейтинг: 0 / 0
05.10.2009, 17:18
    #36233439
NT Man
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
зыпо теме - напиши тестовый пример без своей говнофункции, в вырезанном куске проблема неочевидна.
[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
06.10.2009, 07:19
    #36234162
Korcar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(JavaScript) Непойму в чем разница в коде
NT Man

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

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

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

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


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