技 巧 鍵 盤 ─ KeyNavi:キーボードを活用してホームページを快適に─    
キー割当表示[Shift-H]        
ホーム KeyNavi対応方法 [0] JavaScript@Keynavi.Netトップ [1] id値からオブジェクト取得 ・サイトマップ [Shift-S]

■ id値からオブジェクト取得:kl_getelem(id)

指定された引数IDからオブジェクトを取得します。 該当するものが無い場合は「0」を返します。

【id値からオブジェクト取得「kl_getelem()」<keynavi_ja.js】

//----------------------------
//kl_getelem(id)
//返り値:失敗時は「0」か「undefined」
//id:オブジェクトのID
//----------------------------
function kl_getelem(id){
        if(!kl_isstr(id)) return id;
        if(document.getElementById){ //IE5+,NS6+,Opera
                if(document.getElementById(id)) return document.getElementById(id);
        }else if(document.all){ //IE4+,Opera
                if(document.all(id)) return document.all(id);
        }else if(document.layers){ //Netscape4.x
                return kl_getelem_ns4(id,document);
        }
        return 0;
}
//レイヤーが入れ子になっている場合は再帰的に検索 (Netscape4.x向け)
function kl_getelem_ns4(id,doc){
        if(!doc.layers) return 0;
        for(var i=0;i<doc.layers.length;i++){
                if(doc.layers[i].id==id) return doc.layers[i];
                if(doc.layers[i].document){
                        var t=kl_getelem_ns4(id,doc.layers[i].document);
                        if(t) return t;
                }
        }
        return 0;
}

フィルター的に使えるよう idの代わりにオブジェクト自体が渡された場合は そのままreturnしています。

注意点として、Netscape4.xの場合レイヤーが入れ子になっていると 「document.layers[id]」では動作しません。

【レイヤーが入れ子になっているケース】

<div id="id1" style="position:absolute;">
        <div id="id2" style="position:absolute;">
        ..........
        </div>
</div>

上のようなケースでは 「document.layers["id1"].document.layers["id2"]」などのように アクセスする必要があります。 上のソース例にある関数「kl_getelem_ns4(id,doc)」は再帰的に呼び出され、 該当するidを持つレイヤーを返します。

【kl_getelem()を使ったサンプルHTML】

<script language="javascript" src="http://www.keynavi.net/files/keynavi_ja.js"></script>
.....
<a href="javascript:void(0)" onclick="alert(kl_getelem('link1'))">link1</a>
<a href="javascript:void(0)" onclick="alert(kl_getelem('lay1'))">layer1</a>
.....

id=link1としたリンク

レイヤー「lay1」です。

Netscape4.xではスタイルシートで「position:absolute/relative」を指定しないと 「document.layers[id];」が空になるので「0」が返されます。
Netscape4.xにも対応したい場合は スタイルシートで 「position:absolute」か「position:relative」と指定します。
関連:Netscape4でのレイヤー処理の問題(<JavaScriptバグ&回避法リスト)



【JavaScript@Keynavi.Net : DOM編 】
「Ctrl-矢印」でフォーカスを上下左右に移動できます。

  - id値からオブジェクト取得:kl_getelem(id)
  - 要素の位置、大きさなど各種属性を処理したい
  - 要素の中身を動的に変更:kl_replace(id,s,mode)
  - 要素の属性リストを取得

トップへ戻る [1]
ホーム KeyNavi対応方法 [0] JavaScript@Keynavi.Netトップ [1] id値からオブジェクト取得 ・サイトマップ [Shift-S]
キー割当表示[Shift-H] ─ KeyNavi Project 2003 ─