0

JavaScript ライブラリを作成しています。このライブラリは、HTML ドキュメント内の 1 つまたは複数の div にアタッチされます。ユーザーがライブラリを簡単に統合できるように、自動的にアタッチしたいと思います。HTML 要素がこのようにライブラリに対してどのように識別されるかについて、デファクト スタンダードまたはベスト プラクティスはありますか? 現在、id="fooLibDiv1" や "fooLibMyDiv" など、特定のプレフィックスで始まる ID を持つすべての要素を探しています。これは脆く感じます。'attachFooLib="yes"' のような非標準の属性を探すほうがよいでしょうか? または、特定の CSS クラスを探しますか? 等。

(FWIW、ユーザーにjQueryを要求したくありません。また、ここでコードを探しているのではなく、正しい設計アプローチがどうあるべきかだけです。)

4

3 に答える 3

1

私はその目的のためにIDを使用しません。ユーザーは、別の理由で要素にIDを使用したい場合があります。また、追加の属性を使用すると検証が妨げられます。また、一部のユーザーはそれを希望する場合があります。

私はクラスを使います。ライブラリの名前空間を設定するとよいと思います。たとえば、fooLibButtonまたはなどのクラス名を使用できますfooLibList。要素は複数のクラスを持つことができるため、これによってIDが引き起こす問題が発生することはありません。

jqueryを使用しない場合でも、これらの要素を簡単に取得できます。

/*
 * addLoadEvent based upon this blog article:
 *
 * http://simon.incutio.com/archive/2004/05/26/addLoadEvent
 */
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {oldonload();func();}
    }
}

/*
 * As proposed by Bernard Marx on:
 * http://www.webmasterworld.com/forum91/1729.htm
 */
function getElementsByCondition(condition,container) {
    container = container||document
    var all = container.all||container.getElementsByTagName('*')
    var arr = []
    for(var k=0;k<all.length;k++){
        var elm = all[k]
        if(condition(elm,k)){
            arr[arr.length] = elm
        }
    }
    return arr
}
function checkWetherContainsClass(classname,element){
    var classes =
    element.className.split(" ");
    var found = false;
    var k=0;
    while(k<classes.length&&classes!=classname){k++;}
    return !(k == classes.length);
}

function getElementsByClass(classname,container){
    return getElementsByCondition(function(x,y){return checkWetherContainsClass(classname,x);},container);
}

しかし、あなたの質問に答えるために:afaik、いいえ、事実上の標準はありません。

于 2011-02-28T19:51:39.123 に答える
1

CSS セレクター。このメソッドは、ほぼすべての JS フレームワーク (jQuery、プロトタイプなど) で使用されます。CSS セレクターの構文は、Web 開発者にとってなじみがあり、使いやすいものです。

http://simonwillison.net/2003/Mar/25/getElementsBySelector/

CSS セレクターを受け取り、結果の要素リストにライブラリーをアタッチする init 関数を作成します。

于 2011-02-28T21:12:35.810 に答える