Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблема с getElementByID в ie6 и ie7. (https://javascript.ru/forum/events/7178-problema-s-getelementbyid-v-ie6-i-ie7.html)

vahrusha 19.01.2010 15:30

Проблема с getElementByID в ie6 и ie7.
 
Доброго времени суток. У меня возникла проблема с работой функции в ie6-7, причем, как я заметил, до добавления в html-код страницы тегов form/input, эта функция работала и в этих браузерах. Догадываюсь я, проблема кроется в методе getElementByID.
Кратенько:
вот на примере этого кода:
<p><a href="go_blabla1.php" id="a1">blabla1</a></p>
<p><a href="go_blabla2.php" id="a2">blabla2</a></p>
<p><a href="go_blabla3.php" id="a3">blabla3</a></p>
<p><a href="go_blabla4.php" id="a4">blabla4</a></p>

эта функция делала свое дело:
function checkHref() {
// получаю текущий адрес страницы
	var fullHref = location.href.toString()
// убираю все лишнее
	var num = fullHref.indexOf('go_')
	var shortHref = fullHref.substring(num)
// пробегаюсь по ссылкам, сравниваю каждую с полученной ранее строкой
		for (var i = 1;i <= 4;i++) {
			var lnk = document.getElementById('a' + i)
			if (shortHref == lnk.getAttribute('href'))
			{
// если нашлась, произвожу с ней некие действия...
				var curString = lnk.firstChild.nodeValue.toString()
				var curParent = lnk.parentNode
				curParent.removeChild(lnk)
				var newElem = document.createElement('span')
				newElem.style.color = '#f0a43a'
				newElem.innerHTML = curString
				curParent.appendChild(newElem)
			}
		}
}

А когда в коде появились теги form и input, семейство ie до 7 версии включительно, перестали выполнять задуманное, между прочим ошибок при этом они тоже не выдают.
Спасибо.

Gvozd 19.01.2010 16:21

Телепаты в отпуске
как мы по-вашему можем сказать почему у вас не работает код, если вы выложили только работающий?

vahrusha 19.01.2010 16:48

Исправляюсь...
Функция везде одна, вот с таким HTML работает:
<div>
  <div>
    <p><a href="go_blabla1.php" id="a1">blabla1</a></p>
    <p><a href="go_blabla2.php" id="a2">blabla2</a></p>
    <p><a href="go_blabla3.php" id="a3">blabla3</a></p>
    <p><a href="go_blabla4.php" id="a4">blabla4</a></p>
  </div>
</div>

Вот с таким HTML не работает в ie6-7:
<div>
  <div>
    <p><a href="go_blabla1.php" id="a1">blabla1</a></p>
    <p><a href="go_blabla2.php" id="a2">blabla2</a></p>
    <p><a href="go_blabla3.php" id="a3">blabla3</a></p>
  </div>
  <div>
    <form>
      <input />
      <div>
      </div>
    </form>
    <div>
      <p><a href="go_blabla4.php" id="a4">blabla4</a></p>
    </div>
  </div>
</div>

micscr 19.01.2010 19:24

Попробуйте так заменить код в условии:
// если нашлась, произвожу с ней некие действия...
var curString = lnk.firstChild.nodeValue.toString();
var curParent = lnk.parentNode;
var newElem = document.createElement('span');
var newText = document.createTextNode(curString);
newElem.appendChild(newText);
newElem.style.color = '#f0a43a';
curParent.replaceChild(newElem, lnk);
break; // тоже не забывайте чтобы лишнее не проверять

vahrusha 21.01.2010 07:06

Цитата:

Сообщение от micscr
Попробуйте так заменить код в условии:

Спасибо, за поправку, особенно за break. Сам я только начал изучать js и вообще программированием заниматься, всегда рад таким советам. Но проблема не решена.
По теме я нашел следующее:
Цитата:

There seems to be a problem with IE6 & 7 and the getElementById function
When looking for an Id in a DIV everything works perfectly fine, however if the DIV is inside a form, the DIV is not found...
Ohter browsers such as Opera, Safari and Firefox work fine...
Is there any workaround ?
Вот еще тут говорится о том, что ie6-7 объединяет атрибуты id и name:
http://remysharp.com/2007/02/10/ie-7...etelementbyid/
Я вообще в form и input атрибут name не использовал, равно как и div внутрь form не вкладывал, а функция в осликах все равно не работает.

micscr 21.01.2010 09:26

Form тут ни при чем. Просто в IE атрибут href возвращает полностью. Надо его тоже обрезать:
var h1, n1;
		for (var i = 1;i <= 4;i++) {
			var lnk = document.getElementById('a' + i)
			if (!lnk) continue;
		    h1 = lnk.getAttribute('href');//alert(h1);
	         n1 = h1.indexOf('go_')
	         h1 = h1.substring(n1) //alert(h1);			
			if (shortHref == h1 )
			{
// если нашлась, произвожу с ней некие действия...


Ваш первый код тоже работает нормально. Заметили то что в комментариях: //alert(h1); очень помогает при отладке - выяснить в чем дело.

vahrusha 21.01.2010 10:13

Большое спасибо за то, что потратили свое время на меня. Благодаря Вам, я во всем разобрался.


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