2013-05-08 3 views
1

내 코드는 다음과 같습니다. 나는 내가 생각할 수있는 모든 것을 시도했다. 나 div ID를 사용하여 시도하고 지금 클래스를 시도했다. 아무것도 작동하는 것 같습니다. 나는 옆에 엔트리가 없다면 넘버 2가 보이지 않기를 바랄 뿐이다. 그것이 테이블에 있는지 여부는 중요하지 않습니다.Javascript에서 다른 div의 값이 비어 있으면 div를 표시하지 않도록하려면 어떻게해야합니까?

감사합니다.

<style type="text/css"> 
<!-- 
.leftone { 
    float: left; 
    height: auto; 
    width: auto; 
} 
.rightone { 
    float: left; 
    height: auto; 
    width: auto; 
} 
.lefttwo { 
    float: left; 
    height: auto; 
    width: auto; 
} 
.righttwo { 
    float: left; 
    height: auto; 
    width: auto; 
} 
--> 
</style> 


<table width="400" border="0" cellpadding="0" cellspacing="3" id="tableONE"> 
    <tr> 
     <td width="200" height="50"><div class="leftone">1.)</div></td> 
     <td width="200" height="50"><div class="rightone">The Number One</div></td> 
    </tr> 
    <tr> 
     <td width="200" height="50"><div class="lefttwo">2.)</div></td> 
     <td width="200" height="50"><div class="righttwo"></div></td> 
    </tr> 
</table> 

<p>&nbsp;</p> 

<script type="text/javascript"> 
<!-- 
function shownumbers() { 
    var myNum1 = '[.rightone]'; 
    if(myNum1 != ''){ 
     document.getElementById('.leftone').style.display = "block"; 
    } 
    else if(myNum1 == ''){ 
     document.getElementById('.leftone').style.display = "none"; 
    } 
    var myNum2 = '[.righttwo]'; 
    if(myNum2 != ''){ 
     document.getElementById('.lefttwo').style.display = "block"; 
    } 
    else if(myNum2 == ''){ 
     document.getElementById('.lefttwo').style.display = "none"; 
    } 
} 
//--> 
</script> 
+0

당신은'document.getElementById를를 사용하는()'하지만 당신은 어떤 ID의 정의, 당신은 클래스 이름이 정의되어 있지 않습니다. –

+0

CSS 클래스를 ID로 사용하고 있습니다. 공유 클래스 또는 공통 선택기 ("td div"가 작동 할 것임)가 있어야하며 모두 동일한 부동 소수점, 너비 및 높이를가집니다. 그런 다음 실제로 JS에 연결해야하는 경우 ID를 사용할 수 있습니다. –

+1

이것은 의미가 없습니까? 함수를 트리거하는 것은 무엇이며 변수를 위 행의 문자열로 설정하면 변수를 비울 수 있습니까? – adeneo

답변

0

클래스에는 getElementById를 사용할 수 없습니다. 또한 '필요 없습니다.' 또는 '#'자바 스크립트에서 이러한 메서드를 사용할 때. 아래는 당신이 요구하는 것을해야합니다. class 'rightone'과 'leftone'클래스 중 오직 하나의 아이템 만 있다면 ID를 사용해야합니다.

HTML :

<table width="400" border="0" cellpadding="0" cellspacing="3" id="tableONE"> 
    <tr> 
     <td><div class="left">1.)</div></td> 
     <td><div class="right">The Number One</div></td> 
    </tr> 
    <tr> 
     <td><div class="left">2.)</div></td> 
     <td><div class="right"></div></td> 
    </tr> 
</table> 

JS :

var myNum1 = document.getElementsByClassName('rightone')[0].innerHTML; 
if(myNum1 != ''){ 
    document.getElementsByClassName('leftone')[0].style.display = 'block'; 
} else if(myNum1 == ''){ 
    document.getElementsByClassName('leftone')[0].style.display = 'none'; 
} 

더 우아한 해결책이 될 것 제이슨의에 일종의 유사

var right = document.getElementsByClassName('right'); 

for(var i=0;i<right.length;i++){ 
    if(!right[i].innerHTML){ 
     right[i].parentNode.parentNode.getElementsByClassName('left')[0].style.display = 'none'; 
    } else { 
     right[i].parentNode.parentNode.getElementsByClassName('left')[0].style.display = 'right'; 
    } 
} 
+0

너무 늦게 깨달았고 클래스와 ID를 코드에 포함 시켰습니다. 죄송합니다. innerHTML 태그를 사용해야한다는 것을 알지 못했습니다. 이제는 완벽하게 작동합니다. 여러분 모두에게 당신의 도움에 감사드립니다. 고맙습니다. – gmorison

+0

고맙습니다 Jason, 솔루션이 완벽하게 작동합니다! – gmorison

0

,하지만 난 I'mma를하도록 시간을 보냈다 그것을 게시하십시오. ;)

JSFiddle : http://jsfiddle.net/H3UNH/1/

HTML :

<table id="tableONE"> 
    <tr> 
     <td width=50>1.)</td> 
     <td >The Number One</td> 
    </tr> 
    <tr> 
     <td>2.)</td> 
     <td></td> 
    </tr> 
</table> 

(I 테이블에서 셀의 폭 속성처럼 아직도, 그것은 CSS로 이동할 수 있지만 나를 위해 그 예외 중 하나입니다 . 어디 마크 업 및 프리젠 테이션은 중복의 작은 비트를 CSS로 다른 모든 이동 할 수 있습니다 귀하의 마일리지가 다를 수 있음)

CSS :..

td { padding: 3px; text-align:left; height: 50px;} 

자바 스크립트 :

function shownumbers() { 
    var rows = document.getElementsByTagName('tr'); 
    for(var i=0,len=rows.length;i<len;i++) { 
     var _this = rows[i]; 
     var rowCells = _this.getElementsByTagName('td'); 
     if(rowCells[1].innerHTML == "") { 
      _this.style.display = "none"; 
     } 
    } 
} 

shownumbers(); 

(데모의 목적을 위해, 난 그냥 개별적으로 전화 shownumbers. 자동으로 원하면 자체 호출하십시오. 그렇지 않으면 어디서든지 불러라.)

더 중요한 교훈은 실제로 JavaScript가 아니라고 생각한다. ;) 나는 모든 사람이 완벽한 자바 스크립트를 작성하지는 않는다는 것을 이해한다. 그러나 웹에 대한 유지 보수가 용이 한 마크 업과 프리젠 테이션을 작성하려면 CSS와 클래스의 목적을 이해해야합니다. 나는 그것이 너무 겸손하게 들리거나 아무것도 들리지 않기를 바랍니다. 그럴 의도가 아니 었습니다.

+0

그레그에게 감사드립니다. 나는 실제로 테스트를 위해이 코드를 함께 던졌을뿐 아니라 수많은 HTML 파일이있는 훨씬 더 큰 프로젝트에서이 코드를 사용하고 있습니다. 일반적으로 별도의 CSS 파일 등을 사용하지만 테스트 중간에 전환하면 클래스와 div ID가 엉망이되었습니다. 죄송합니다 모두들. 각 셀이 분리되어 있으므로 실제로는 대부분 ID 만 사용하고있었습니다. 나는 당신의 코드를 아직 시도하지는 않았지만, 문제에 대한 해결책보다 더 많은 해결책을 갖는 것이 항상 낫기 때문에 계획을 세웠다. 도와 줘서 고마워. – gmorison

+0

멋진 콩. 당신이 그것을 필요로 할 때까지 당신은 바이올린에서 그것을 가지고 놀 수 있습니다. 예를 들어,이 함수는 ALL 요소를 가져옵니다. 특정 셀렉터를 특정 테이블 또는 기타 등등에 대해 더 많은 사용자 정의 가능하게 만들 수 있습니다. –

0

: 빈 선택자를 사용합니다.

var els = document.querySelectorAll('td div:empty'), 
    i = els.length, 
    el; 

for(;i--;) { 
    el = els[i]; 

    do { 
     el = el.parentNode; 
    } while (el.nodeName != 'TR') 

    el.style.display = 'none'; 
} 

바이올린 : http://jsfiddle.net/uAUt8/

+0

예쁜 영리한! 나는 그것이 "너무 영리한"라인 (삼항 연산자처럼)을 넘는다면 결정을 내리지 못했지만, 나는 접근 방식을 분명히 고맙게 생각한다 : 나는 내 것이 꽤 일반적이라고 생각했지만 이것은 훨씬 더 좋다. . –

+0

잘 모르겠습니다. 하지만 내 질문은, 테이블 셀이 비어 있다면 왜 그들은 거기에 있을까요? – banzomaikaka

+0

셀을 비우는 것이 필요한 경우이를 표시하는 것이 올바른 방법입니다. 나는 판단 할 요구 사항에 대해 충분히 알지 못합니다. ;) 전체 행이 "쓸모 없게"되면, 외관상으로 숨기는 것은 두 번째로 좋은 계획 일뿐입니다 ... 행을 전혀 렌더링하지 않는 것이 더 좋은 방법 일 수 있습니다. –

관련 문제