特定のプロパティが機能するかどうかではなく、機能するかどうかをテストする場合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');
}