0

オンロードを実行する JavaScript 関数があります。クラスごとにアンカー タグを検索し、タグ内のデータに基づいて onclick 関数を追加します。私の問題は、href の一部を含む変数 'h' にあります。この関数の最後の評価が何であれ、それが設定されます。したがって、h の最後の値が「s-g123」の場合、ページ上のすべてのリンクは、リンクに挿入される値としてこれを持ちます。実行時に h の値を修正して静的にするにはどうすればよいですか? 前もって感謝します。

// converts <a href='#g123' class="shoh"> to <a href='#g123' onclick=function() { shoh( 's-g123', 'show') }">
function managelinks() {
var elems = document.getElementsByTagName('*'), i;
var h, pos;
for (i = 0; i < elems.length; i++) {
    if ((elems[i].className).indexOf('shoh') > -1) {
        if ((pos = elems[i].href.indexOf('#')) > -1) {
            h = "s-" + elems[i].href.substr(pos + 1);
            elems[i].onclick = function () {
                shoh(h, 'show')
            };
        }
    }
}
4

1 に答える 1

2

古い遅延ブラウザーをサポートする必要がない場合は、次のようなものを使用できます。

function managelinks() {
    // querySelectorAll should work with ie8+
    var elems = document.querySelectorAll('a.shoh'), i;
    var h, pos, elem;
    for (i = 0; i < elems.length; i++) {
        elem = elems[i];
        h = elem.hash.substr( 1 );
        if ( h ) {
            // remember the value of h by making a closure
            elem.onclick = (function( myH ){
                return function () {
                    shoh( myH, 'show');
                };
            })( h );
        }
    }
}

jQuery ライブラリ (またははるかに小さい ZeptoJS) も使用している場合、関数ははるかに短くなる可能性があります。

function managelinks() {
    $(document).on('click', 'a.shoh', function(){
        var h = this.hash.substr( 1 );
        if ( h )  shoh( h, 'show');
    });
}

http://api.jquery.com/on/http://zeptojs.com/#onを参照してください。

于 2013-10-01T07:36:51.457 に答える