SYNTAX_ERR:DOM例外12 - 嗯

时间:2011-09-06 05:07:27

标签: javascript html5 dom syntax-error domexception

我一直在为使用HTML5 Rock Slideshow code的客户端制作一个小型幻灯片/公开显示器。我遇到了一个DOM Exception 12 - 一个语法错误,据说与CSS选择器有关 - 同时用它来解决它...但我无法追溯到我在代码中所做的任何更改。我在想,当我添加功能时,它可能会被发现。

我已将其追溯到此对象(实时版本here):

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()的实例化(main.js中的第521行):

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

调用queryAll('.slide')会返回包含.slide类的所有幻灯片的数组。但是,在将queryAll('.slide')作为参数进行实例化SlideShow()时,会返回DOM Exception 12错误。

以前是否有人见过这个?

5 个答案:

答案 0 :(得分:54)

您在文档中使用非法的id属性(在HTML5之前是非法的),例如2-slide。修复它们。

解释: 要解决element.querySelectorAll() .slide,选择器#2-slide .moreselectors 将在内部重写(通过使用元素的id)。这将产生类似的结果:

{{1}}

...并强制执行错误,因为ID可能不以数字开头。

请参阅小提琴:known misbehaviour

答案 1 :(得分:10)

如果您在HTML5岩石幻灯片中搜索此错误后来到这里:

由于某些原因,他们使用以下内容删除了“to-build”类:

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

这打破了所有幻灯片的使用版本,即使现在的Google演示已经破解

只需将 default.js 的行 220 更改为

toBuild[0].classList.remove('to-build');
一切都很好!

答案 2 :(得分:2)

在我的情况下,它使用的是self.postMessage(e.data);在使用网络工作者的主线程中。

我知道这与OP的问题无关,但这是一个奇怪的错误,所以我离开这里,希望它能帮助别人。

答案 3 :(得分:1)

同样的问题,但在我的情况下,尝试从其属性中获取元素

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

和SYNTAX_ERR:DOM Exception 12仅在Safari上发生。所以我改变它直接从类中获取元素,现在工作正常。

答案 4 :(得分:0)

你可以像在applescript中那样转义引号,然后在safari上没有问题

do JavaScript "document.querySelector('span[" & attrName & "=\"" & attrValue & "\"]').click();"