0

innerHTMLオブジェクトの「純粋な」JavaScript プロパティと、またはのようなネイティブ プロパティを区別する必要がありますstyle

Safari ではプロパティを使用Object.getOwnPropertyDescriptor()して確認できconfigurableます (特別なプロパティの場合は false) が、残念ながら Chrome や Firefox では同じ結果になりません (プロパティが構成可能であることを返します)。

このフィドルを別のブラウザーで試して、問題を確認してください。

プロパティが特別な内部プロパティであるかどうかを判断する信頼できる方法はありますか?

アップデート

undefinedネイティブ プロパティのプロパティ記述子を取得しようとすると、Firefox が実際に返されることに気付きました。残念ながら、Chrome は通常のプロパティとまったく同じように見えるプロパティ記述子を返します。

たとえばinnerHTML、Chrome の記述子は次のとおりです。

{"value":"","writable":true,"enumerable":true,"configurable":true}

...そして、「test」と呼ばれる空の文字列プロパティの場合:

{"value":"","writable":true,"enumerable":true,"configurable":true}

まったく同じ。:(

4

1 に答える 1

2

問題のDOM要素の新しく作成されたインスタンスでプロパティが定義されているかどうかを確認する必要があります。

'innerHTML' in (document.createElement('div')); //yes

これをテストする関数は次のようになります。

var test = function (elem, prop) {
    return prop in (typeof elem === 'string' ? document.createElement(elem) : elem)
}

console.log( test( 'div', 'innerHTML') );
console.log( test( document.getElementsByTagName('body')[0], 'innerHTML') );
console.log( test( document.getElementsByTagName('body')[0], 'monkey') );​
于 2012-09-25T22:18:47.103 に答える