Jintrick.netagenda2002年04月アーカイブ → 2002年04月20日

xpointerモドキ

child sequenceの形式を拝借して、xpointerモドキのURLを作成しようという試み。

function Jpointer(){
    var es = event.srcElement;
    var indexAry = [];
    var k = 0;
    while(es.parentNode.nodeName != '#document'){
        var children = es.parentNode.childNodes;
        for(var child, i=0; i<children.length; i++){
            child = children.item(i);
            if(child === es){
                indexAry[k] = i + 1;
                k++;
                break;
            }
        }
        es = es.parentNode;
    }
    var jpt = indexAry.reverse().join('/');
    var uri = document.URL.split('#')[0] + '#/' + jpt;
    alert(uri); // 実際はクリップボードにuriをコピー
}

こんな感じのを、右クリックメニューに登録しようと思ったのですが……。

どうも配列番号がずれてしまいます。何故。

風邪をひいてしまって頭がぼんやり。なんかフラフラするし。これから寝込むので、メモを残しておくです。

何がしたいかというと、長い長い文書を読んでいるとき「ここまで読んだ」というメモを残したい。しかし実際にメモを残すなら、ローカルに保存するしかないわけで。そこで、「ここまで読んだ」という情報をURLに託して、それを元にWWW上の文書の当該箇所にユーザーjsにてid属性をつけて、location.hrefで飛んでみようかと。

サクっと作れるかと思ったら躓いてしまった。苦労してまで実現したいって訳じゃないのに。そんな長い文章、滅多に読むものじゃないし。さ。

これは child sequenceを解釈するユーザーjsの方。

function Jpointer(){
    var jpt = document.URL.split('#/');
    if(!jpt[1]) return;
    var s = jpt[1].split('/');
    for(var i=0; i<s.length; i++){
        var index = s[i]-1;
        var root = (!i) ?
            document.documentElement.childNodes.item(index) :
            root.childNodes.item(index);
    }
    root.id = 'jpointed';
    location.href = jpt[0] + '#jpointed';
}

これを、window.onloadなり、IE限定ならscript要素のdefer属性なりを利用して文書読み込み後に実行。

ウィルスには細心の注意を払っているにもかかわらずこれだ。リアルな方のウィルス。日曜は一日中寝込む。


webmaster@jintrick.net
公開: 2002年04月20日
カテゴリ: Javascript