Скрипт заставляет IE6 работать без ошибок - PullRequest
1 голос
/ 26 января 2010

Я ненавижу IE6, на самом деле, я бы хотел, чтобы Microsoft выпустила патч, который убил эту чертову штуку. Следующий скрипт прекрасно работает в IE> 6 & FF, WebKit (chrome etal) без проблем; есть идеи?

(function getElementsByClass(searchClass) {
        node = document;
        tag = '*';
        var els = node.getElementsByTagName(tag);
        var elsLen = els.length;
        var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
        var count = 1;
        for (i = 0, j = 0; i < elsLen; i++) {
            if ( pattern.test(els[i].className) ) {
                    var re1='.*?';  // Non-greedy match on filler
                    var re2='(\\\'.*?\\\')';    // Single Quote String 1
                    var p = new RegExp(re1+re2,["i"]);
                    var m = p.exec(els[i].getAttribute("onclick"));
                    var popURL = "";
                    if (m != null)
                    {
                      var strng1=m[1];
                      popURL = strng1.replace(/'/g,'');
                    }

                    els[i].setAttribute("href", popURL + "?keepthis=true&tb_iframe=true&height=430&width=400");
                    els[i].setAttribute("class", "thickbox"); 
                    els[i].removeAttribute("onclick");
                    j++;
                    count++;
            }
        }
       // return count; Ignore the return
})("vtthickbox");

Ответы [ 2 ]

3 голосов
/ 26 января 2010

typeof els[i].getAttribute("onclick") возвращает function в моем IE6, но FF, Opera возвращает string.

Я не думаю, что RegExp.exec может обрабатывать function объект.

И с этим typeof m[1] стал undefined, что также вызывает popURL до undefined.

1 голос
/ 26 января 2010

Почему бы просто не использовать это вместо этого:

function getElementsByClass(searchClass) {
 var classElements = new Array(),
     node = document,
     tag = '*',
     els = node.getElementsByTagName(tag),
     elsLen = els.length,
     pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)"),
     i,
     j;
 for (i = 0, j = 0; i < elsLen; i++) {
  if (pattern.test(els[i].className)) {
   classElements[j] = els[i];
   j++;
  };
 };
 return classElements;
};

Затем поместить логику обработчика событий onclick вне функции getElementsByClass().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...