web-dev-qa-db-ja.com

SYNTAX_ERR:DOM例外12-うーん

HTML5 Rockの スライドショーコード を使用するクライアント用の小さなスライドショー/パブリックディスプレイに取り組んでいます。 CSSセレクターに関連すると思われる構文エラーであるDOM例外12に遭遇しましたが、それを回避しながら...コードで行った変更にまでさかのぼることができません。機能を追加したときに明らかになったものだと思います。

このオブジェクトまで追跡しました(ライブバージョン ここ ):

_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_エラーが返されます。

誰もこれを見たことがありますか?

41
Isaac Lewis

文書内で不正なid属性(HTML5より前の違法)を使用しています。 _2-slide_。それらを修正します。

説明するために: 既知の誤動作 を解決するためにelement.querySelectorAll()セレクター_.slide_は内部的に書き換えられました(要素のIDを使用して)。これにより、次のような結果になります。

_#2-slide .moreselectors
_

... IDがNumberで始まっていない可能性があるため、エラーを強制します。

フィドルを参照してください: http://jsfiddle.net/doktormolle/FGWhk/

54
Dr.Molle

HTML5 Rocksスライドでこのエラーを検索した後にここに来る場合:

何らかの理由で、次のようにクラス「to-build」を削除します。

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

これは、使用ビルドのすべてのスライドデッキを破壊します。Googleのデモも破壊されます

行を変更するだけ22 of default.js

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

すべては順調です!

10
wesbos

私の場合、self.postMessage(e.data)を使用していました。 Webワーカーの使用中にメインスレッドで。

私はそれがOPの問題に関係していないことを知っていますが、それは奇妙なエラーですので、他の人を助けることを期待してここに残しています。

2
Drazisil

私と同じ問題ですが、私の場合は属性から要素を取得しようとしています

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

およびSYNTAX_ERR:DOM例外12はSafariでのみ発生しました。そのため、クラスから要素を直接取得するように変更し、正常に動作するようになりました。

1
Martino

AppleScriptのように引用符をエスケープすれば、サファリでは問題ありません

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