jqにおけるhtml()メソッドの不適切な使用によるトラップ
.htmlメソッドパラメータを渡さないときに要素のhtml内容を取得し、ソースコードを表示する
標準ではないがすべてのブラウザでサポートされているinnerHTMLで実現されていることが分かった.注意:html 5はこの属性を受け入れました(http://www.w3.org/TR/2008/WD-html5-20080610/dom.html#innerhtml0).html()メソッドの戻り値をコード分岐の条件として使用するユーザーもいます.たとえば、次のようにします.
多くの場合問題ありませんが、id=userのhtml要素にスペースがあれば、所望の結果は得られません.例:
div[id=user]内のテキストjackの前にうっかり3つのスペースが増えたが、このときブラウザごとに表現が異なる:IEでは、ポップアップ文字列の長さは4であり、スペースは無視されている.Firefox/Safari/Chrome/Operaでは、ポップアップは7です.つまり、スペースは無視されません.今取ります.html()の戻り値がコード分岐の条件として明らかに非IEブラウザでエラーが発生する.要素のhtml内容を判断条件としなければならない場合、解決策は簡単である1、htmlを書くときにスペース2を削除し、html()メソッドを呼び出した後、var str=$('#user')などのtrimを呼び出す.html().trim();
return this[0] && this[0].nodeType === 1 ?
this[0].innerHTML.replace(rinlinejQuery, "") :
null;
標準ではないがすべてのブラウザでサポートされているinnerHTMLで実現されていることが分かった.注意:html 5はこの属性を受け入れました(http://www.w3.org/TR/2008/WD-html5-20080610/dom.html#innerhtml0).html()メソッドの戻り値をコード分岐の条件として使用するユーザーもいます.たとえば、次のようにします.
var str = $('#user').html();
if( str=='jack' ){
...
}else if( str=='tom' ){
...
}else if( str=='lily' ){
...
}
多くの場合問題ありませんが、id=userのhtml要素にスペースがあれば、所望の結果は得られません.例:
<div id="user"> jack</div>
<script>
alert(document.getElementById('user').innerHTML.length);
</script>
div[id=user]内のテキストjackの前にうっかり3つのスペースが増えたが、このときブラウザごとに表現が異なる:IEでは、ポップアップ文字列の長さは4であり、スペースは無視されている.Firefox/Safari/Chrome/Operaでは、ポップアップは7です.つまり、スペースは無視されません.今取ります.html()の戻り値がコード分岐の条件として明らかに非IEブラウザでエラーが発生する.要素のhtml内容を判断条件としなければならない場合、解決策は簡単である1、htmlを書くときにスペース2を削除し、html()メソッドを呼び出した後、var str=$('#user')などのtrimを呼び出す.html().trim();