Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.01.2010, 15:30
Аспирант
Отправить личное сообщение для vahrusha Посмотреть профиль Найти все сообщения от vahrusha
 
Регистрация: 19.01.2010
Сообщений: 42

Проблема с 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 версии включительно, перестали выполнять задуманное, между прочим ошибок при этом они тоже не выдают.
Спасибо.

Последний раз редактировалось vahrusha, 19.01.2010 в 15:40.
Ответить с цитированием
  #2 (permalink)  
Старый 19.01.2010, 16:21
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Телепаты в отпуске
как мы по-вашему можем сказать почему у вас не работает код, если вы выложили только работающий?
Ответить с цитированием
  #3 (permalink)  
Старый 19.01.2010, 16:48
Аспирант
Отправить личное сообщение для vahrusha Посмотреть профиль Найти все сообщения от vahrusha
 
Регистрация: 19.01.2010
Сообщений: 42

Исправляюсь...
Функция везде одна, вот с таким 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>

Последний раз редактировалось vahrusha, 19.01.2010 в 16:52.
Ответить с цитированием
  #4 (permalink)  
Старый 19.01.2010, 19:24
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

Попробуйте так заменить код в условии:
// если нашлась, произвожу с ней некие действия...
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; // тоже не забывайте чтобы лишнее не проверять

Последний раз редактировалось micscr, 19.01.2010 в 19:28.
Ответить с цитированием
  #5 (permalink)  
Старый 21.01.2010, 07:06
Аспирант
Отправить личное сообщение для vahrusha Посмотреть профиль Найти все сообщения от vahrusha
 
Регистрация: 19.01.2010
Сообщений: 42

Сообщение от 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 не вкладывал, а функция в осликах все равно не работает.
Ответить с цитированием
  #6 (permalink)  
Старый 21.01.2010, 09:26
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

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); очень помогает при отладке - выяснить в чем дело.
Ответить с цитированием
  #7 (permalink)  
Старый 21.01.2010, 10:13
Аспирант
Отправить личное сообщение для vahrusha Посмотреть профиль Найти все сообщения от vahrusha
 
Регистрация: 19.01.2010
Сообщений: 42

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема IE7 dark Элементы интерфейса 4 07.10.2009 08:50
вывод getElementById проблема Russian Общие вопросы Javascript 4 07.08.2009 14:54
Подвисания в IE6 smart1k Internet Explorer 6 16.06.2009 17:55
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47
Проблема с анкерами в IE6 Макс Internet Explorer 1 25.10.2008 17:01