2016-08-24 38 views
1

我想附加json數據以帶入樹形視圖結構。起初,我創造了靜態樹視圖這是我的小提琴代碼使用JSON樹視圖:如何將子級別和盛大兒童級別json數據附加到樹視圖結構中

var json = { 
 
    "category": [{ 
 
     "title": "Customer Satisfaction", 
 
     "id": "nnanet:category/certified-pre-owned", 
 
     "items": [{ 
 
      "title": "Bulletins", 
 
      "id": "nnanet:category/customer-satisfaction/bulletins", 
 
      "thirditems": [{ 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }, { 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }] 
 
     }, { 
 
      "title": "Consumer Affairs", 
 
      "id": "nnanet:category/customer-satisfaction/consumer-affairs" 
 
     }, { 
 
      "title": "Loyalty", 
 
      "id": "nnanet:category/customer-satisfaction/loyalty", 
 
      "thirditems": [{ 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }, { 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }] 
 
     }] 
 
    }, { 
 
     "title": "Retailer Digital Marketing", 
 
     "id": "nnanet:category/retailer-digital-marketing", 
 
     "items": [{ 
 
      "title": "TOI", 
 
      "id": "nnanet:category/retailer-digital-marketing/toi", 
 
      "thirditems": [{ 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }, { 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }] 
 
     }, { 
 
      "title": "Basics", 
 
      "id": "nnanet:category/retailer-digital-marketing/reference-guide/basics" 
 
     }, { 
 
      "title": "International", 
 
      "id": "nnanet:category/retailer-digital-marketing/international" 
 
     }] 
 
    }, { 
 
     "title": "Finance Today", 
 
     "id": "nnanet:category/customer-satisfaction/bulletins/finance-today", 
 
     "items": [{ 
 
      "title": "TOI", 
 
      "id": "nnanet:category/retailer-digital-marketing/toi", 
 
      "thirditems": [{ 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }, { 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }] 
 
     }, { 
 
      "title": "Basics", 
 
      "id": "nnanet:category/retailer-digital-marketing/reference-guide/basics" 
 
     }, { 
 
      "title": "International", 
 
      "id": "nnanet:category/retailer-digital-marketing/international" 
 
     }] 
 
    }, { 
 
     "title": "Annual", 
 
     "id": "nnanet:category/customer-satisfaction/bulletins/finance-today/revenue/annual", 
 
     "items": [{ 
 
      "title": "TOI", 
 
      "id": "nnanet:category/retailer-digital-marketing/toi" 
 
     }, { 
 
      "title": "Basics", 
 
      "id": "nnanet:category/retailer-digital-marketing/reference-guide/basics" 
 
     }, { 
 
      "title": "International", 
 
      "id": "nnanet:category/retailer-digital-marketing/international" 
 
     }] 
 
    }] 
 
}; 
 
    function expander(){ 
 
     var tree = document.querySelectorAll('ul.tree a:not(:last-child)'); 
 
    for(var i = 0; i < tree.length; i++){ 
 
     tree[i].addEventListener('click', function(e) { 
 
      var element = e.target.parentElement; //actually this is just the elem itself 
 
      var parent = element.parentElement 
 

 
      var opensubs = parent.querySelectorAll(':scope .open'); 
 
      console.log(opensubs); 
 
      var classList = element.classList; 
 
      if(opensubs.length !=0) { 
 
        for(var i = 0; i < opensubs.length; i++){ 
 
        opensubs[i].classList.remove('open'); 
 
       } 
 
      } 
 
       classList.add('open'); 
 

 
     }); 
 
    } 
 
    } 
 
$(function(){ 
 
\t \t var tree = $("ul.tree"); 
 
    $.each(json.category,function(category){ 
 
    \t var categoryValue = json.category[category]; 
 
    \t tree.append('<li><a href="#">'+categoryValue.title+'</a><ul></ul></li>'); 
 
     var el = tree.children("li").children("ul"); 
 
     $.each(categoryValue.items,function(itemId){ 
 
     \t var item = categoryValue.items[itemId]; 
 
     $(el[category]).append('<li><a href="#">'+item.title+'</a></li>'); 
 
     if(item.thirditems){ 
 
     \t $(el[category]).children("li").append('<ul></ul>'); 
 
      var el1 = el.children("li").children("ul"); 
 
      $.each(item.thirditems,function(thirdItemId){ 
 
      var thirdItem = item.thirditems[thirdItemId]; 
 
      console.log(el1[itemId]); 
 
      $(el1[itemId]).append('<li><a href="#">'+thirdItem.title+'</a><ul></ul></li>'); 
 
      }); 
 
     } 
 
     
 
     }); 
 
    }); 
 
    expander(); 
 
});
body { 
 
    font-family: Arial; 
 
} 
 

 
ul.tree li { 
 
    list-style-type: none; 
 
    position: relative; 
 
} 
 

 
ul.tree li ul { 
 
    display: none; 
 
} 
 

 
ul.tree li.open > ul { 
 
    display: block; 
 
} 
 

 
ul.tree li a { 
 
    color: black; 
 
    text-decoration: none; 
 
} 
 

 
ul.tree li a:before { 
 
    height: 1em; 
 
    padding:0 .1em; 
 
    font-size: .8em; 
 
    display: block; 
 
    position: absolute; 
 
    left: -1.3em; 
 
    top: .2em; 
 
} 
 

 
ul.tree li > a:not(:last-child):before { 
 
    content: '+'; 
 
} 
 

 
ul.tree li.open > a:not(:last-child):before { 
 
    content: '-'; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<ul class="tree"></ul>

這裏我有挑戰追加三級JSON數據和最多兩個級JSON追加正常。在使用thirditem條件後面臨問題。 在我的json代碼中有一個名爲thirditems的數組。如何將此thirditems數組附加到相應的父數組?

正好在零售商digital marketing > sub-ToI > semi-sub-TOI > super-sub-TOI所有的thirditems json數組只追加到第一個值。 Upto兩級json數據正在追加,但如何追加第三級json數據?

欲瞭解更多信息檢查此琴:https://jsfiddle.net/ak3zLzgd/6/

回答

0

我想通了這 - 檢查

var json = { 
 
    "category": [{ 
 
     "title": "Customer Satisfaction", 
 
     "id": "nnanet:category/certified-pre-owned", 
 
     "items": [{ 
 
      "title": "Bulletins", 
 
      "id": "nnanet:category/customer-satisfaction/bulletins", 
 
      "thirditems": [{ 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }, { 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }] 
 
     }, { 
 
      "title": "Consumer Affairs", 
 
      "id": "nnanet:category/customer-satisfaction/consumer-affairs" 
 
     }, { 
 
      "title": "Loyalty", 
 
      "id": "nnanet:category/customer-satisfaction/loyalty", 
 
      "thirditems": [{ 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }, { 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }] 
 
     }] 
 
    }, { 
 
     "title": "Retailer Digital Marketing", 
 
     "id": "nnanet:category/retailer-digital-marketing", 
 
     "items": [{ 
 
      "title": "TOI", 
 
      "id": "nnanet:category/retailer-digital-marketing/toi", 
 
      "thirditems": [{ 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }, { 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }] 
 
     }, { 
 
      "title": "Basics", 
 
      "id": "nnanet:category/retailer-digital-marketing/reference-guide/basics" 
 
     }, { 
 
      "title": "International", 
 
      "id": "nnanet:category/retailer-digital-marketing/international" 
 
     }] 
 
    }, { 
 
     "title": "Finance Today", 
 
     "id": "nnanet:category/customer-satisfaction/bulletins/finance-today", 
 
     "items": [{ 
 
      "title": "TOI", 
 
      "id": "nnanet:category/retailer-digital-marketing/toi", 
 
      "thirditems": [{ 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }, { 
 
       "title": "TOI", 
 
       "id": "nnanet:category/retailer-digital-marketing/toi" 
 
      }] 
 
     }, { 
 
      "title": "Basics", 
 
      "id": "nnanet:category/retailer-digital-marketing/reference-guide/basics" 
 
     }, { 
 
      "title": "International", 
 
      "id": "nnanet:category/retailer-digital-marketing/international" 
 
     }] 
 
    }, { 
 
     "title": "Annual", 
 
     "id": "nnanet:category/customer-satisfaction/bulletins/finance-today/revenue/annual", 
 
     "items": [{ 
 
      "title": "TOI", 
 
      "id": "nnanet:category/retailer-digital-marketing/toi" 
 
     }, { 
 
      "title": "Basics", 
 
      "id": "nnanet:category/retailer-digital-marketing/reference-guide/basics" 
 
     }, { 
 
      "title": "International", 
 
      "id": "nnanet:category/retailer-digital-marketing/international" 
 
     }] 
 
    }] 
 
}; 
 
    function expander(){ 
 
     var tree = document.querySelectorAll('ul.tree a:not(:last-child)'); 
 
    for(var i = 0; i < tree.length; i++){ 
 
     tree[i].addEventListener('click', function(e) { 
 
      var element = e.target.parentElement; //actually this is just the elem itself 
 
      var parent = element.parentElement 
 

 
      var opensubs = parent.querySelectorAll(':scope .open'); 
 
      console.log(opensubs); 
 
      var classList = element.classList; 
 
      if(opensubs.length !=0) { 
 
        for(var i = 0; i < opensubs.length; i++){ 
 
        opensubs[i].classList.remove('open'); 
 
       } 
 
      } 
 
       classList.add('open'); 
 

 
     }); 
 
    } 
 
    } 
 
$(function(){ 
 
\t \t var tree = $("ul.tree"); 
 
    $.each(json.category,function(category){ 
 
    \t var categoryValue = json.category[category]; 
 
    \t tree.append('<li><a href="#">'+categoryValue.title+'</a><ul></ul></li>'); 
 
     var el = tree.children("li").children("ul"); 
 
     $.each(categoryValue.items,function(itemId){ 
 
     \t var item = categoryValue.items[itemId]; 
 
     $(el[category]).append('<li><a href="#">'+item.title+'</a></li>'); 
 
     if(item.thirditems){ 
 
     \t $(el[category]).children("li").append('<ul></ul>'); 
 
      var el1 = $(el[category]).children("li").children("ul"); 
 
      $.each(item.thirditems,function(thirdItemId){ 
 
      var thirdItem = item.thirditems[thirdItemId]; 
 
      
 
      $(el1[itemId]).append('<li><a href="#">'+thirdItem.title+'</a><ul></ul></li>'); 
 
      }); 
 
     } 
 
     
 
     }); 
 
    }); 
 
    expander(); 
 
});
body { 
 
    font-family: Arial; 
 
} 
 

 
ul.tree li { 
 
    list-style-type: none; 
 
    position: relative; 
 
} 
 

 
ul.tree li ul { 
 
    display: none; 
 
} 
 

 
ul.tree li.open > ul { 
 
    display: block; 
 
} 
 

 
ul.tree li a { 
 
    color: black; 
 
    text-decoration: none; 
 
} 
 

 
ul.tree li a:before { 
 
    height: 1em; 
 
    padding:0 .1em; 
 
    font-size: .8em; 
 
    display: block; 
 
    position: absolute; 
 
    left: -1.3em; 
 
    top: .2em; 
 
} 
 

 
ul.tree li > a:not(:last-child):before { 
 
    content: '+'; 
 
} 
 

 
ul.tree li.open > a:not(:last-child):before { 
 
    content: '-'; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<ul class="tree"></ul>

我剛剛更改了以下線 -

var el1 = el.children("li").children("ul"); 

入─

var el1 = $(el[category]).children("li").children("ul"); 

這裏被更新fiddle

+0

非常感謝.......偉大的工作!!!!!!!!!!!!!!!! 11 –

+0

仍然沒有采取 –

+0

檢查此:https://jsfiddle.net/ak3zLzgd/14/ –

相關問題