SYNTAX_ERR: исключение DOM 12 - Хммм - PullRequest
41 голосов
/ 06 сентября 2011

Я работал над небольшим слайд-шоу / публичным показом для клиента, который использует HTML5 Rock Slideshow code . Я столкнулся с DOM Exception 12 - синтаксической ошибкой, которая предположительно связана с CSS-селекторами, - при этом манипулируя ею ... но я не могу отследить ее до изменений, которые я сделал в коде. Я думаю, что это может быть что-то, что было обнаружено, когда я добавил функции.

Я проследил его до этого объекта (живая версия здесь ):

var SlideShow = function(slides) {
    this._slides = (slides || []).map(function(el, idx) {
      return new Slide(el, idx);
    });
    var h = window.location.hash;
    try {
      this.current = h;
    } catch (e) { /* squeltch */ }
    this.current = (!this.current) ? "landing-slide" : this.current.replace('#', '');
    if (!query('#' + this.current)) {
      // if this happens is very likely that someone is coming from
      // a link with the old permalink format, i.e. #slide24
      alert('The format of the permalinks have recently changed. If you are coming ' +
             'here from an old external link it\'s very likely you will land to the wrong slide');
      this.current = "landing-slide";
    }
    var _t = this;
    doc.addEventListener('keydown',
        function(e) { _t.handleKeys(e); }, false);
    doc.addEventListener('touchstart',
        function(e) { _t.handleTouchStart(e); }, false);
    doc.addEventListener('touchend',
        function(e) { _t.handleTouchEnd(e); }, false);
    window.addEventListener('popstate',
        function(e) { if (e.state) { _t.go(e.state, true); } }, false);
};

Создание SlideShow() (строка 521 в main.js ):

var slideshow = new SlideShow(queryAll('.slide'));

Вызов queryAll('.slide') возвращает массив всех слайдов с классом .slide. Однако при передаче queryAll('.slide') в качестве параметра для создания экземпляра SlideShow() возвращается ошибка DOM Exception 12.

Кто-нибудь видел это раньше?

Ответы [ 5 ]

54 голосов
/ 06 сентября 2011

Вы используете недопустимые атрибуты id (недопустимые до HTML5) внутри документа, например, 2-slide.Исправьте их.

Объясните: для решения известного неправильного поведения из element.querySelectorAll() селектор .slide будет внутренне переписан (с использованием идентификатора элемента).Это приведет к чему-то вроде этого:

#2-slide .moreselectors

... и приведет к ошибке, потому что идентификатор может не начинаться с цифры.

См. Скрипту: http://jsfiddle.net/doktormolle/FGWhk/

10 голосов
/ 22 января 2013

Если вы приехали сюда после поиска этой ошибки в HTML5, слайды пород:

По какой-то причине они удаляют класс 'to-build' со следующим:

toBuild[0].classList.remove('to-build', '');

Толомает все слайд-колоды используемой сборки, даже демонстрация Google сейчас нарушена

Просто измените строку 220 из default.js на

toBuild[0].classList.remove('to-build');

все хорошо!

2 голосов
/ 07 августа 2013

В моем случае это было использование self.postMessage (e.data); в основном потоке при использовании веб-работников.

Я знаю, что это не связано с проблемой ОП, но это странная ошибка, поэтому я оставляю это здесь в надежде, что это поможет другим.

1 голос
/ 30 января 2017

Та же проблема для меня, но в моем случае попытка получить элементы из их атрибута

document.querySelectorAll('input[name="path"]')

и SYNTAX_ERR: DOM Exception 12 произошла только в Safari.Поэтому я изменил его, чтобы получить элемент непосредственно из класса и теперь отлично работает.

0 голосов
/ 11 декабря 2017

Вы можете избежать кавычек, как в appleScript, тогда нет проблем в сафари

do JavaScript "document.querySelector('span[" & attrName & "=\"" & attrValue & "\"]').click();"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...