2017-01-04 5 views
-4
storedObjective = ""; 
storedSignal_type = ""; 
$.each(data, function(index, key) { 

    if (key.objective == storedObjective) 
    { 
     print_1 = ""; 
    } 
    else 
    { 
     print_1 = key.objective; 
     storedObjective = key.objective; 
    } 
    if (key.signal_type == storedSignal_type) 
    { 
     print_2 = ""; 
    } 
    else 
    { 
     print_2 = key.signal_type; 
     storedSignal_type = key.signal_type; 
    } 

    $('#myTable').append('<tr><td>'+print_1+'</td><td>'+print_2+'</td><td>'+key.signal_name+'</td></tr>'); 
    console.log(print_1); 
    console.log(print_2); 


    if (print_1==="" && print_2==="") 
    { 
     $('tr').addClass('yes') 
    } 
    else{ 
     $('tr').addClass('no') 
    } 
}); 

코드의 첫 번째 부분은 모두 정상적으로 작동합니다. 그러나 결국, 내 ifconsole.log 이러한 변수가 없어야한다고해도 항상 true으로 평가됩니다. 내가 여기서 무엇을 놓치고 있니?빈 문자열에 대한 IF 문 검사는 항상 참을 반환합니다.

+5

일부 컨텍스트가 도움이됩니다. 예를 들어, 변수가 보유하고있는 것과 이유는 무엇입니까? – baao

+0

변수에 포함 된 값을 모르는 경우 어떻게 도와 드릴까요? – Jecoms

+0

그것이 항상 사실로 평가된다는 것을 어떻게 알 수 있습니까? 그것을 확인하기 위해 블록 안에 breakpoint를 넣거나 console.log() 문을 넣었습니까? –

답변

3

당신은 클래스를 할당하는 (예/아니오) 모든 기존 행의 if을 만약 그렇다면 :

여기

만 현재 요소는 클래스가 주어집니다 기존 테이블 행이 모두 해당 클래스를 가져오고 else이 일치하는 경우와 동일합니다. append을 단순화하고 거기에 클래스를 추가 할 수 있습니다.

var className = print_1==="" && print_2==="" ? 'yes' : 'no'; 
$('#myTable').append('<tr class="' + className + '"><td>'+print_1+'</td><td>'+print_2+'</td><td>'+key.signal_name+'</td></tr>'); 
+0

감사 ... 이것은 "작동"하지만 올바른 행에 클래스를 추가하지 않습니다. – jonmrich

+1

그러면 변수가 예상 한 바를 유지하지 못하거나 if 뒤에있는 논리가 잘못되었습니다. 만약 그것이 '아니오'일 필요가있는 '예'라면, 제 3 자 @jonmrich – baao

+0

젠장 ... 스위치로 바꾸십시오. 실제로 작동합니다. 렌더링하는 방법을 조정해야합니다. 감사! – jonmrich

2

yes/no 클래스를 각각의 for 요소에있는 현재 요소에만 추가해야합니다. 그렇지 않으면 tr에 다른 요소 중 하나가 조건을 충족하면 yes/no가 지정됩니다.

let $nextRow = $('<tr><td>'+print_1+'</td><td>'+print_2+'</td> <td>'+key.signal_name+'</td></tr>'); 

if (print_1==="" && print_2==="") 
    $nextRow.addClass('yes'); 
else 
    $nextRow.addClass('no'); 

$('#myTable').append($nextRow); 

var data = [ 
 
    { 
 
     "objective": "Awareness", 
 
     "signal_type": "Efficiency", 
 
     "signal_name": "CPM" 
 
    }, 
 
    { 
 
     "objective": "Awareness", 
 
     "signal_type": "Quality", 
 
     "signal_name": "Click-thru Rate" 
 
    }, 
 
    { 
 
     "objective": "Awareness", 
 
     "signal_type": "Quality", 
 
     "signal_name": "Frequency" 
 
    }, 
 
    { 
 
     "objective": "Awareness", 
 
     "signal_type": "Quality", 
 
     "signal_name": "Interaction Rate" 
 
    }, 
 
    { 
 
     "objective": "Awareness", 
 
     "signal_type": "Quality", 
 
     "signal_name": "Viewability" 
 
    }, 
 
    { 
 
     "objective": "Awareness", 
 
     "signal_type": "Volume", 
 
     "signal_name": "Display Time" 
 
    }, 
 
    { 
 
     "objective": "Awareness", 
 
     "signal_type": "Volume", 
 
     "signal_name": "Impression" 
 
    }, 
 
    { 
 
     "objective": "Awareness", 
 
     "signal_type": "Volume", 
 
     "signal_name": "Reach" 
 
    }, 
 
    { 
 
     "objective": "Conversion", 
 
     "signal_type": "Efficiency", 
 
     "signal_name": "Cost per Action" 
 
    }, 
 
    { 
 
     "objective": "Conversion", 
 
     "signal_type": "Efficiency", 
 
     "signal_name": "ROI/ROAS" 
 
    }, 
 
    { 
 
     "objective": "Conversion", 
 
     "signal_type": "Quality", 
 
     "signal_name": "Avg Order Value" 
 
    }, 
 
    { 
 
     "objective": "Conversion", 
 
     "signal_type": "Volume", 
 
     "signal_name": "Conversion" 
 
    }, 
 
    { 
 
     "objective": "Conversion", 
 
     "signal_type": "Volume", 
 
     "signal_name": "Revenue" 
 
    }, 
 
    { 
 
     "objective": "Engagement", 
 
     "signal_type": "Efficiency", 
 
     "signal_name": "Cost per Click" 
 
    }, 
 
    { 
 
     "objective": "Engagement", 
 
     "signal_type": "Quality", 
 
     "signal_name": "Avg Interaction Time" 
 
    }, 
 
    { 
 
     "objective": "Engagement", 
 
     "signal_type": "Quality", 
 
     "signal_name": "Conversion Rate" 
 
    }, 
 
    { 
 
     "objective": "Engagement", 
 
     "signal_type": "Volume", 
 
     "signal_name": "Click" 
 
    }, 
 
    { 
 
     "objective": "Engagement", 
 
     "signal_type": "Volume", 
 
     "signal_name": "Interaction" 
 
    }, 
 
    { 
 
     "objective": "Engagement", 
 
     "signal_type": "Volume", 
 
     "signal_name": "Interaction Time" 
 
    } 
 
]; 
 

 
storedObjective = ""; 
 
storedSignal_type = ""; 
 
$.each(data, function(index, key) { 
 

 
    if (key.objective == storedObjective) 
 
    { 
 
     print_1 = ""; 
 
    } 
 
    else 
 
    { 
 
     print_1 = key.objective; 
 
     storedObjective = key.objective; 
 
    } 
 
    if (key.signal_type == storedSignal_type) 
 
    { 
 
     print_2 = ""; 
 
    } 
 
    else 
 
    { 
 
     print_2 = key.signal_type; 
 
     storedSignal_type = key.signal_type; 
 
    } 
 

 
    let $nextRow = $('<tr><td>'+print_1+'</td><td>'+print_2+'</td> <td>'+key.signal_name+'</td></tr>'); 
 

 

 
    if (print_1==="" && print_2==="") 
 
    { 
 
     $nextRow.addClass('yes'); 
 
    } 
 
    else{ 
 
     $nextRow.addClass('no'); 
 
    } 
 
    $('#myTable').append($nextRow); 
 
});
.yes { 
 
    background-color: green; 
 
} 
 

 
.no { 
 
    background-color: red; 
 
    color: white; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table id="myTable"> 
 
</table>

+0

잘 모르겠습니다. 내 console.log는 항상 비어 있지는 않습니다. – jonmrich

+0

코드에서 ... 모든 행은 빨간색입니다. 그것은 내가 성취하고자하는 것이 아닙니다. 그 수정은 뭐니? – jonmrich

+0

클래스를 제거하지 않으므로 둘 다 클래스를가집니다. 모든 'tr'에 yes/no 클래스를 추가했습니다. – Jecoms

관련 문제