Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.10.2010, 10:48
Аспирант
Отправить личное сообщение для abstract Посмотреть профиль Найти все сообщения от abstract
 
Регистрация: 20.09.2010
Сообщений: 58

getAttribute IE8 как это работает?
Странная фигня творится.
function rmline(element){
	while (element.tagName!='TR'){
		element=element.parentNode;
	}
	if((element.nodeType==1)&(element.tagName=='TR')){
		//Создаем hidden input элемент за <table>
		var id=element.children[0].cloneNode(true);
		var value_str=id.getAttribute('value');
		id.setAttribute('value',value_str+'_deleted');
		var table=element.parentNode;
		element.parentNode.removeChild(element);

		
		while (table.tagName!='TABLE'){
			table=table.parentNode;
		}
		table.appendChild(id);

В частности id.getAttribute('value') в firefox все ок. В IE - null. Причем я вообще запутался, потому что в этом же js файле я эту функцию использовал
if((element.nodeType==1)&(element.tagName=='TR')){
			var inputs=element.getElementsByTagName('input');
			for (var i=0;i<inputs.length;i++){	
				if((inputs.item(i).tagName=='INPUT')&(inputs.item(i).getAttribute('name')=='id')&
					(inputs.item(0).getAttribute('value')!='_inserted')&(!re.test(inputs.item(0).getAttribute('value')))){
					var value=inputs.item(0).getAttribute('value');
					inputs.item(0).setAttribute('value',value+'_changed');
				}
			}
		}

Здесь отрабатывает....
Ответить с цитированием
  #2 (permalink)  
Старый 29.10.2010, 10:59
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Вы уверены, что берёте атрибут именно у того элемента, у которого надо взять? childNodes вещь ненадёжная.
Ответить с цитированием
  #3 (permalink)  
Старый 29.10.2010, 11:17
Аспирант
Отправить личное сообщение для abstract Посмотреть профиль Найти все сообщения от abstract
 
Регистрация: 20.09.2010
Сообщений: 58

var id=element.children[0].cloneNode(true); в отладчике IE id = нужный элемент INPUT. Да SetAttribute тоже перестал работать... странно...
Ответить с цитированием
  #4 (permalink)  
Старый 29.10.2010, 11:18
Аспирант
Отправить личное сообщение для abstract Посмотреть профиль Найти все сообщения от abstract
 
Регистрация: 20.09.2010
Сообщений: 58

могу предположить, что set и get Attribute не работают с клоном... - Не обращать на эту запись внимание, работают.

Последний раз редактировалось abstract, 29.10.2010 в 12:24. Причина: Не обращать на эту запись внимание, работают.
Ответить с цитированием
  #5 (permalink)  
Старый 29.10.2010, 11:35
Аспирант
Отправить личное сообщение для abstract Посмотреть профиль Найти все сообщения от abstract
 
Регистрация: 20.09.2010
Сообщений: 58

var test=element.children[0].getAttribute('value');
element.children[0].setAttribute('value','123');
Это тоже не работает. test=null,
Однако element.children[0] в IE отладчике показывает в свойстве innerHTML = "<INPUT value=2 type=hidden name=id> ". Странно... что это за тег такой, в котором находится тег INPUT...И почему Firefox его не видит...
Ответить с цитированием
  #6 (permalink)  
Старый 29.10.2010, 11:37
Аспирант
Отправить личное сообщение для abstract Посмотреть профиль Найти все сообщения от abstract
 
Регистрация: 20.09.2010
Сообщений: 58

Ну да точно...element.children[0].children[0] и есть INPUT... не понимаю ничего...
В IE хорошо, firefox теперь не понимает... В общем придется перемещаться вниз по дереву пока nodeName!="INPUT", тогда и в FF и в IE будет работать...
а вообще .."будь проклят тот день, когда я сел за клавиатуру этого пылесоса"...

Последний раз редактировалось abstract, 29.10.2010 в 11:46.
Ответить с цитированием
  #7 (permalink)  
Старый 29.10.2010, 12:03
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от abstract
В общем придется перемещаться вниз по дереву пока nodeName!="INPUT", тогда и в FF и в IE будет работать...
var input = element.getElementsByTagName('INPUT')[0];
Ответить с цитированием
  #8 (permalink)  
Старый 29.10.2010, 12:21
Аспирант
Отправить личное сообщение для abstract Посмотреть профиль Найти все сообщения от abstract
 
Регистрация: 20.09.2010
Сообщений: 58

Kolyaj,спасибо Вам большое.
Вот так работает и в FF и в IE.
function rmline(element){
	
	while (element.tagName!='TR'){
		element=element.parentNode;
	}
	if((element.nodeType==1)&(element.tagName=='TR')){
		var input = element.getElementsByTagName('INPUT')[0];
		var value_str=input.getAttribute('value');
		input.setAttribute('value',value_str+'_deleted');
		
		var table=element.parentNode;
		element.parentNode.removeChild(element);
		if (value_str=='_inserted'){
			return;
		}

		
		while (table.tagName!='TABLE'){
			table=table.parentNode;
		}
		table.appendChild(input);
	}

	
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery не работает ни в IE8 ни в Firefox Jon Events/DOM/Window 7 09.01.2010 23:39
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56
Сторонние библиотеки - быть или не быть? IIIEPJIOK Оффтопик 64 21.03.2009 19:39
Как избежать наложения текста(выпадающий список)? AlexMak (X)HTML/CSS 2 22.12.2008 10:52
Как понимать это выражение? Хранитель Света Общие вопросы Javascript 2 22.07.2008 17:03