42

私は、HTML5 Rock のSlideshow コードを使用するクライアント向けの小さなスライドショー/パブリック ディスプレイに取り組んできました。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);
};

( main.jsSlideShow()の521 行目)のインスタンス化:

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

を呼び出すqueryAll('.slide')と、クラスが のすべてのスライドの配列が返されます.slidequeryAll('.slide')ただし、インスタンス化のパラメーターとして渡すとSlideShow()、エラーが返されDOM Exception 12ます。

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

4

5 に答える 5

55

ドキュメント内で不正な id 属性 (HTML5 以前は不正) を使用しています2-slide。それらを修正します。

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

#2-slide .moreselectors

ID は数字で始まらない場合があるため、エラーが発生します。

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

于 2011-09-06T06:36:53.533 に答える
9

HTML5 rocks slides でこのエラーを検索してここに来た場合:

何らかの理由で、次のように「ビルドする」クラスを削除します。

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

これにより、使用ビルドで使用されているすべてのスライド デッキが壊れます。現在の Google デモでさえ壊れています。

default.jsの220行目を次のように変更するだけです。

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

すべては順調です!

于 2013-01-22T17:45:46.883 に答える