2011-09-14 30 views
0

IEが次のコードで動作しない問題が発生しています。コードは基本的に要素が空であればdivを隠しますが、IE以外では動作することに気づくでしょう。オブジェクトがこのプロパティまたはメソッドをサポートしていません

//hide webapp item if empty 
if ($("#features").html().trim()) {} else { 
    $("#f-h").hide() 
} 
if ($("#application").html().trim()) {} else { 
    $("#a-h").hide() 
} 
if ($("#tech-specs").html().trim()) {} else { 
    $("#t-h").hide() 
} 
if ($("#downloads").html().trim()) {} else { 
    $("#d-h").hide() 
} 
if ($("#custom-field").html().trim()) {} else { 
    $("#c-f").hide() 
} 

アクションでそれを見るためにページがすなわちdoesntのこのまたはより良い方法などが認識されるであろう理由にwebpage

任意のヒントです。

+2

**常に**コードを繰り返し書きます。ステップバイステップ。このテクニックに従っていれば、問題の原因となったコードの正確さを知ることができます。 – zerkms

+6

これはかなり醜いです。 html()。trim()){$( "##fh")} hide()} if(空文字列を空白にする代わりに、 ; ' – meagar

+1

if文の式として' $( '#field')。is( ':empty') 'を使用することもできます。 –

答えて

1

jQuery html()メソッドは、HTMLを含む文字列を返します。

JavaScript文字列にはtrim()メソッドがありません。

JavaScriptのStringオブジェクトに1つを導入したい場合は、あなたはそうすることができます:

String.prototype.trim = function() { 
    return this.replace(/^\s*/, "").replace(/\s*$/, ""); 
} 

^^^これをテストしませんでしたが、私はそれが仕事をするだろうと確信しています。

+0

それは仕事をしました!歓声メイト。 – user943741

2

私の推測によれば、Internet Explorerは行を別々に解析しているため、エラーが発生します。これを解決するには、にセミコロンを使用して、行末を常にマークします。また、空のif/elseブロックをif-notsに置き換えて、コードを少しきれいにしました。

//hide webapp item if empty 

if (!$("#features").html().trim()) { 
    $("#f-h").hide(); 
} 

if (!$("#application").html().trim()) { 
    $("#a-h").hide(); 
} 

if (!$("#tech-specs").html().trim()) { 
    $("#t-h").hide(); 
} 

if (!$("#downloads").html().trim()) { 
    $("#d-h").hide(); 
} 

if (!$("#custom-field").html().trim()) { 
    $("#c-f").hide(); 
} 
+0

おかげで@ベンリーとあなたのコードはより洗練されたより効率的に見えますが、ページはまだ同じエラーで動作しません。私はそれが役に立ったらURLを表示するために投稿を編集しました。 – user943741

1

HTMLの構造によってはJavaScriptを大幅に簡略化できます。非表示にする要素が一貫して相互に近い/隣に配置されている場合は、セクションにクラスを割り当てることができます(「機能」、「アプリケーション」、「技術仕様」など)。 "セクション"、非表示にする要素( "f-h"、 "a-h"、 "t-h"など) 「 - 私を隠す」、と仕事をするために単一の関数を使用します。

$('.section').each(function() { 
    if ($(this).is(':empty')) { 
     $(this).closest('.hide-me').hide(); 
    } 
}); 

私は必ずしもこのソリューションを愛していないが、あなたはまた、あなたがテストし、彼らならば非表示にしたいセクションのマップを使用することができます

var items = [ 
    { key: '#features', value: '#f-h' }, 
    { key: '#application', value: '#a-h' }, 
    { key: '#tech-specs', value: '#t-h' }, 
    { key: '#downloads', value: '#d-h' }, 
    { key: '#custom-field', value: '#c-h' } 
]; 

$.each(items, function(index, element) { 
    if ($(element.key).is(':empty')) { 
     $(element.value).hide(); 
    } 
}); 

Here's a working example上記のコードのランダムな場所にあります。

これはあなたの質問に答えることはできませんが、私はちょうど私の$ 0.02を与えたいと思っています。

+0

これは間違いなく$ 2.02相当の価値があります。どのようにコードを作ることがより効率的であるかを見ることができます。私はあなたの最初の提案をうまく動作させるコードを書き直してみようと思います! – user943741

関連する問題