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属性なりを利用して文書読み込み後に実行。
ウィルスには細心の注意を払っているにもかかわらずこれだ。リアルな方のウィルス。日曜は一日中寝込む。