JS: Как сделать document.getElementById кросс-браузерным? - PullRequest
6 голосов
/ 22 декабря 2009

document.getElementById , похоже, не работает во всех браузерах (я имею в виду некоторые старые), и я уверен, что есть разработчики, которые не знают об этом.

Какие решения вы бы предложили сделать кросс-браузерными?

Спасибо

Ответы [ 4 ]

9 голосов
/ 22 декабря 2009

Если document.getElementById не работает, то либо:

  • Вы делаете это неправильно (неверный HTML, пытаетесь получить доступ к именам вместо идентификаторов и т. Д.)

или

  • Вы работаете с Netscape 4.x и Internet Explorer 4.x

Существует три способа работы с браузерами этой эпохи.

  • Скажите людям, чтобы обновить. Они не поддерживаются, ночные кошмары в безопасности как для пользователя, так и для автора.
  • Создайте материал, который работает и убедитесь, что ваш JS проверяет наличие getElementById и друзей, прежде чем пытаться их использовать (if (!document.getElementById) { return false; /* Insufficient DOM to bother with JS here */ })
  • Узнайте о document.all и document.layers
4 голосов
/ 22 декабря 2009

Вы уверены, что это не такая проблема ? Посмотрите, это интересно, я раньше этого не знал.

Однако, чтобы дополнить то, что уже было предложено Дэвидом Дорвордом, вы пишете функцию, подобную приведенной ниже.

function getElement (id) {

  if (document.getElementById) {
    return document.getElementById(id);
  }

  else if (document.all) {
    return window.document.all[id];
  }

  else if (document.layers) {
    return window.document.layers[id];
  }
} 
1 голос
/ 22 декабря 2009
getElemID(obj){

if(document.getElementByID){
 return document.getElementByID(obj);
}

 else if (document.all){
  return document.all[obj];
  }

  else if (document.layers){
     return  document.layers[obj];
     }

  else {
       alert("Could not find support");
       return false;
       }
}
0 голосов
/ 20 февраля 2015
function getDOM() {
    if (document.getElementById) {
        return document.getElementById; 
    }

    var window_document = window.document || {};
    var elements = window_document.all || window_document.layers;
    if(elements) {
        return function(x) { return elements[x]; }
    }

    // everything failed
    throw new InternalError('No means to "getElementById"');
}

... затем

var getElementById;
try {
    getElementById = getDOM();
} catch(err) {
    alert(err);
}
// implicit 0K
var oHTMLElement = getElementById('#main');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...