2017-11-17 9 views
-1

나는 JSTree을 사용하고 AJAX를 통해이 트리를 채우고 있습니다. AJAX는 버튼 클릭 이벤트에서 작동하며 AJAX 매개 변수는 Select2 드롭 다운을 사용합니다.JS 트리가 DOM에 있는지 확인하려면

@Html.DropDownListFor(model => model.SelectedBedType, BedType, new { @class = "form-control", id = "BedType" }) 

<button type="button" id="btnBedType" class="btn btn-primary" onclick="CreateTree()">Show Beds</button> 

<div id="divTreePanelBed" class="panel-body"> 
    <div id="jsTreeBed"> 
    </div> 
</div> 


@Html.DropDownListFor(model => model.SelectedFoodType, FoodType, new { @class = "form-control", id = "FoodType" }) 

<button type="button" id="btnFoodType" class="btn btn-primary" onclick="CreateTree()">Show Food</button> 

<div id="divTreePanelFood" class="panel-body"> 
    <div id="jsTreeFood"> 
    </div> 
</div> 

스크립트

$('#btnBedTypeAlert').OnClick 
{ 
    //AJAX which populates the tree based on drop down selection 
} 

처음에게 페이지가로드, 그것은 잘 작동합니다. 드롭 다운에서 항목을 선택하고 버튼을 누르면 트리가로드됩니다. 누군가가 드롭 다운 항목을 변경하면 트리를 숨길 필요가있어서 사용자가 버튼을 클릭하게하고 새로운 AJAX 호출이있게됩니다. 나는이 나무가있을 때만이 모든 것을 숨기고 싶다. 내 문제는 트리가 DOM에 있는지 확인하는 방법입니다.

나는이 같은 페이지에 다른 나무 JSTreeFood이며, 그래서 예기치 않은 동작의 원인이됩니다 내가 .jstree 클래스 현재 수표를 사용할 수 없습니다

$('#BedType').on("change", function (e) { 

if(Condition to check if there is JSTreeBed in the DOM) 
{ 
    jstree.destroy() 
    alert(test); 
} 
}); 

을 시도했습니다.

+1

질문을 명확히해야합니다. 같은 페이지에 다른 트리가있는 경우 "DOM에 JSTree가 있습니까?"라는 질문을 할 수 없습니다. – Pointy

+0

@Pointy DOM에 특정 JSTree가있는 것과 같습니다. 특정 나무를 확인해야합니다. – TheFallenOne

+0

그런 다음 해당 특정 트리 만 포함하거나 포함하지 않는 부모 요소를 살펴보십시오. 'if ($ ('# jsTreeBed'). has ('. jstree'))'는'tree가'jsTreeBed' 엘리먼트 안에 위치한다고 가정하여 트릭을 수행합니다. – trincot

답변

-1

jquery를 사용하여 요소를 숨기거나 표시 할 수 있습니다.

$('#btnBedTypeAlert').click(function() { 
    //AJAX which populates the tree based on drop down selection 
    $("#divTreePanelAlert").show(); 
}); 

$("#BedType").change(function() { 
    $("#divTreePanelAlert").hide(); 
}); 
+0

이것은 트릭을합니다. Dom에있는 요소를 숨기고 싶다면 Dom에 있는지 여부를 확인해야 할 필요가 없습니다. 왜냐하면 dom에있는 요소를 숨기려면 "숨겨둔"것이기 때문입니다. 컨테이너에 무엇을 넣고 있는지 잊어 버리고, 사용자가 드롭 다운을 클릭 할 때 컨테이너를 숨겨서 디스플레이를 토글합니다. – Harry

+0

hide와 함께 문제는 jstree에 여전히 데이터가 있으며 게시물에 부정확 한 데이터가 제공됩니다. 예상되는 데이터는 널 (null)이어야합니다. 따라서 선택 변경시 트리를 파손해야하며 트리가 존재하는지 여부를 알아야합니다. – TheFallenOne

+0

좋습니다. 부분보기에서 jstree를 넣고 아약스 요청에 따라 서버에서 새로로드하십시오. 그걸하는 법을 아십니까? 당신은 문자 그대로 DOM에서 오래된 트리를 제거하고 서버로부터 부분 뷰에서 새로운 트리를로드 할 것입니다. – Harry