Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   getAttribute IE8 как это работает? (https://javascript.ru/forum/css-html/12693-getattribute-ie8-kak-ehto-rabotaet.html)

abstract 29.10.2010 10:48

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');
				}
			}
		}

Здесь отрабатывает....

Kolyaj 29.10.2010 10:59

Вы уверены, что берёте атрибут именно у того элемента, у которого надо взять? childNodes вещь ненадёжная.

abstract 29.10.2010 11:17

var id=element.children[0].cloneNode(true); в отладчике IE id = нужный элемент INPUT. Да SetAttribute тоже перестал работать... странно...

abstract 29.10.2010 11:18

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

abstract 29.10.2010 11:35

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 его не видит...

abstract 29.10.2010 11:37

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

Kolyaj 29.10.2010 12:03

Цитата:

Сообщение от abstract
В общем придется перемещаться вниз по дереву пока nodeName!="INPUT", тогда и в FF и в IE будет работать...

var input = element.getElementsByTagName('INPUT')[0];

abstract 29.10.2010 12:21

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);
	}

	
}


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