Проблема с 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 версии включительно, перестали выполнять задуманное, между прочим ошибок при этом они тоже не выдают. Спасибо. |
Телепаты в отпуске
как мы по-вашему можем сказать почему у вас не работает код, если вы выложили только работающий? |
Исправляюсь...
Функция везде одна, вот с таким 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> |
Попробуйте так заменить код в условии:
// если нашлась, произвожу с ней некие действия... 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; // тоже не забывайте чтобы лишнее не проверять |
Цитата:
По теме я нашел следующее: Цитата:
http://remysharp.com/2007/02/10/ie-7...etelementbyid/ Я вообще в form и input атрибут name не использовал, равно как и div внутрь form не вкладывал, а функция в осликах все равно не работает. |
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); очень помогает при отладке - выяснить в чем дело. |
Большое спасибо за то, что потратили свое время на меня. Благодаря Вам, я во всем разобрался.
|
Часовой пояс GMT +3, время: 05:48. |