2011-09-14 5 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() 
} 

페이지는 더 나은 방법은 평가 될 것입니다 이유 즉 나던 이런거나 webpage

어떤 힌트입니다.

+2

** 항상 ** 코드를 반복 작성하십시오. 단계별로. 이 기술을 따랐다면 정확한 코드가 어떤 문제를 일으키는 지 알 수 있습니다. – zerkms

+6

이것은 꽤 못생긴다. 빈 if/non-empty else를 가지는 대신에 if :'if (! $ ("# features") .html(). trim()) {$ ("# fh")} ; – meagar

+1

if 문에 대한 표현식으로'$ ('# field'). is (': empty')'를 사용할 수도 있습니다. –

답변

1

jQuery html() 메서드는 HTML이 포함 된 문자열을 반환합니다.

JavaScript 문자열에 trim() 메서드가 없습니다.

자바 스크립트의 String 객체를 소개하고 싶다면. 다음과 같이 할 수 있습니다 :

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

^^^이 작업을 테스트하지는 않았지만 실제로 작업을 수행 할 것이라고 확신합니다.

+0

그 일을 했어! 힘내 친구 야. – user943741

2

제 생각에는 Internet Explorer가 선을 다르게 구문 분석하여 오류가 발생했을 것입니다. 이 문제를 해결하려면 은 항상 세미콜론을 사용하여 줄 끝을 표시합니다. 나는 빈 코드를 if-not 블록으로 대체하면서 코드를 약간 정리했다.

//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

감사합니다. @Ben Lee와 다른 사람은 코드가 더 깨끗하고 효율적으로 보이지만 페이지가 여전히 같은 오류로 작동하지 않습니다. 도움이된다면 URL을 보여주기 위해 게시물을 편집했습니다. – user943741

1

HTML의 구조에 따라 JavaScript를 크게 단순화 할 수 있습니다. 숨기려는 요소가 서로의 옆이나 옆에 일관되게 배치되면 섹션 (예 : '기능', '애플리케이션', '기술 사양'등)에 클래스를 할당 할 수 있습니다. "섹션", 숨기려는 요소 (예 : "f-h", "a-h", "t-h"등) "- 나를 숨기"하고 작업 할 수있는 하나의 기능을 사용 : 나는 반드시이 솔루션을 사랑하지 않는

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

을, 그러나 당신은 또한 테스트 할 섹션의 맵을 사용하며이 경우 숨길 수 HTML의 임의의 위치에 있습니다.

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

관련 문제