Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Регулярные выражения


Автор: Friackazoid 23.11.2006, 13:22
Весб день седня ссума схожу.
есть такой HTML код
Код

<span class="subtitle"><label for="simgr_2">маленькая</label></span><br/>
<input type="file" name="simgr_2" id="simgr_2" size="20" style="width: 95%;"/><br/>
<span class="comment">120×60 пикселей</span>

Это небольшая часть, чтоб понять в чем суть.

Есть функция которая, с помощью apendChild добавляет в динамически созданный див еще такой код. Но нужно все id и for заменить на id и for порядкового номера то есть id="simgr_3" for="simgr_3".
Для этого я беру innerHTML нужного DIV'а и использую регулярное выражение

Код

var NewHtml=html.replace(/(\_\d+)/gi,'_'+ImagesCount);


и в Опере все работает замечательно, но експлорер съедает кавычку, то есть получаю id=simgr_3 for=simgr_3
пробовала выражение
Код

var NewHtml=html.replace(/(\_\d+\")/gi,'_'+ImagesCount+'"');

но получаеться еще хуже, потому что тогда не зяменяеться число
сколько не искала подобных проблем больше ни у кого не нашла smile 

Если кто знает что за ерунда то подскажите, пожалуста.


Автор: SelenIT 23.11.2006, 13:46
Friackazoid, избавьтесь от иллюзий, что innerHTML уже добавленного в DOM элемента совпадает с кодом, который Вы ввели лично - браузер гененирует его заново в соответствии со своими "привычками", так что изменение регистра, перестановка атрибутов местами, лишние пробелы и т.п. при этом - вполне обычное дело.

Лучше доставайте <img> из нужного дива с помощью
Код

var newimg = newdiv.getElementsByTagName('img')[0];
и спокойно меняйте ему нужные свойства:
Код

newimg.name = newimg.id = newimg.id.split('_')[0] + '_'+ImagesCount;

Автор: Avb 23.11.2006, 13:49
var element = document.createElement(...);
var number=3;
element.setAttribute('id', 'simgr_'+number); или element.id = 'simgr_'+number;
anotherElement.appendChild(element);

Автор: Friackazoid 23.11.2006, 13:50
SelenIT, 

в том-то и дело что нужно поменять не только id  и name у img но и свойство for у label'a а к нему подобного боступа нет smile 

Автор: SelenIT 23.11.2006, 14:07
Friackazoid, вот так есть доступ:
Код

нечто.getElementsByTagName('label')[0].getAttribute('for'));

ой, поторопился... в IE действительно нет, сорри...

Автор: SelenIT 23.11.2006, 14:27
Friackazoid, я разобрался - искомое свойство метки называется htmlFor. Все-таки полезная иногда штука http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/htmlfor_1.asp...

Автор: Zeroglif 23.11.2006, 15:33
IE может обойтись и без кавычек вокруг id, всё равно их удалит. Если очень хочется всё-таки поставить:

Код

html.replace(/(simgr_)\d+/gi,'"$1'+ImagesCount+'"');

Автор: Friackazoid 23.11.2006, 20:14
Огромное всем спасибо за помощь smile  smile  
Заработало  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)