42

我一直在为使用 HTML5 Rock 的幻灯片代码的客户端制作一个小型幻灯片/公共显示器。我遇到了一个 DOM 异常 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);
};

( main.jsSlideShow()中的第 521 行)的实例化:

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

调用queryAll('.slide')返回一个包含所有幻灯片的数组,其中包含.slide. queryAll('.slide')但是,当作为实例化的参数传递时SlideShow(),它会返回DOM Exception 12错误。

有人见过这个吗?

4

5 回答 5

55

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

解释:为了解决已知element.querySelectorAll()的选择器错误行为,.slide将在内部重写(通过使用元素的 id)。这将导致类似的结果:

#2-slide .moreselectors

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

见小提琴:http: //jsfiddle.net/doktormolle/FGWhk/

于 2011-09-06T06:36:53.533 回答
9

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

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

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

这打破了使用构建的所有幻灯片,甚至现在的谷歌演示也被打破了

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

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

一切都很好!

于 2013-01-22T17:45:46.883 回答
2

就我而言,它使用的是 self.postMessage(e.data); 在使用网络工作者时在主线程中。

我知道这与 OP 的问题无关,但这是一个奇怪的错误,所以我把它留在这里,希望它可以帮助其他人。

于 2013-08-07T11:34:52.630 回答
1

对我来说同样的问题,但在我的情况下,尝试从它们的属性中获取元素

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

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

于 2017-01-30T11:10:51.573 回答
0

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

do JavaScript "document.querySelector('span[" & attrName & "=\"" & attrValue & "\"]').click();"
于 2017-12-11T14:43:51.307 回答