1

特定のブラウザで利用できるものをテストしようとしています (JavaScript に関して)。

たとえば、これを入力した場合:

function checksetAttribute(){
    if(document.getElementById("blar").setAttribute("name","blarDiv")){
        alert("Your browser supports it.");
    }
    else{
        alert("Your browser does not support it.");
    }
}

プロパティが機能するかどうかについて、これは正しい答えを返しますか?

4

3 に答える 3

2

特定のプロパティが機能するかどうかではなく、機能するかどうかをテストする場合setAttribute、これは間違ったアプローチであり、setAttribute常にundefined(== false) が返されます。代わりに、要素がキーとして属性名を持っているかどうかをテストします。DOM 内の要素は変更されている可能性があるため、DOM から取得した要素ではなく、新しい要素を使用します。

function attributeWorks(attr, within) {
    return document.createElement(within || 'div').hasOwnProperty(attr);
}

一部のプロパティは特定のタイプの要素にのみ存在するため、パラメーターを追加しましたwithin。たとえば、常に a に対してテストすると<div>、関数は を返しfalseますhref

関数が機能するかどうかをテストする場合、setAttributeこれはまだ間違ったアプローチです。setAttribute実装されていない場合、実行しようとすると、false が返される代わりにエラーがスローされるためです。上記と同じ方法を使用できますが、パラメーターが既にわかっているという単純化があります。

function setAttributeWorks() {
    return document.createElement('div').hasOwnProperty('setAttribute');
}
于 2012-05-30T01:33:09.333 に答える
0

いいえ。ブラウザーが と をサポートしていると仮定するとdocument.getElementByIdsetAttributename 属性が設定されるだけです。そのメソッドが返さvoidれると (これは誤りです)、"Your browser does not support it."例外がスローされない限り、常にアラートが発生します。

nameブラウザが属性をサポートしているかどうかもチェックしません。

于 2012-05-30T01:36:07.387 に答える
0

「setAttribute」がサポートされていない場合、そこにあるコードは失敗すると思います。

var a = document.createElement("div");
if(a.setAttribute){
    alert("VERY SUPPORTED");
}else{
    alert("Not supported");
}

これにより、dom 要素で setAttribute メソッドが使用可能かどうかがチェックされます。

于 2012-05-30T01:33:22.520 に答える