Проблема с 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, время: 15:16. |