2017-02-03 70 views
0

下面的代碼創建5個ul並將li填充到所有的.dropdown菜單中。 如何使用JSON數據(或者有更好的方法)讓jquery填充正確的ul?jquery根據JSON數據填充ul和li

預期輸出: 並非所有幻燈片都進​​入所有模塊..只有某些幻燈片應進入特定模塊,如JSON數據中所示。

var menulist = {"List" : [ 
{"menutitle" : "Module 1", "mod" : "1"}, 
{"menutitle" : "Module 2", "mod" : "2"}, 
{"menutitle" : "Module 3", "mod" : "3"}, 
{"menutitle" : "Module 4", "mod" : "4"}, 
{"menutitle" : "Module 5", "mod" : "5"} 
]} 

var slidelist = {"List" : [ 
{"slidetitle" : "Slide 1", "mod" : "1"}, 
{"slidetitle" : "Slide 2", "mod" : "1"}, 
{"slidetitle" : "Slide 3", "mod" : "1"}, 
{"slidetitle" : "Slide 4", "mod" : "1"}, 
{"slidetitle" : "Slide 5", "mod" : "2"}, 
{"slidetitle" : "Slide 6", "mod" : "2"}, 
{"slidetitle" : "Slide 7", "mod" : "3"}, 
{"slidetitle" : "Slide 8", "mod" : "3"}, 
{"slidetitle" : "Slide 9", "mod" : "3"}, 
{"slidetitle" : "Slide 10", "mod" : "4"}, 
{"slidetitle" : "Slide 11", "mod" : "4"}, 
{"slidetitle" : "Slide 12", "mod" : "5"}, 
{"slidetitle" : "Slide 13", "mod" : "5"}, 
{"slidetitle" : "Slide 14", "mod" : "5"}, 
{"slidetitle" : "Slide 15", "mod" : "5"} 
]} 


$(document).ready(function(){ 
    var listmenus = ""; 
    for (var t = 0; t < menulist.List.length; t++){ 
     listmenus += "<a href='#' class='dropdown-toggle' data-toggle='dropdown'>" + menulist.List[t].menutitle + "<span class='caret'></span></a><ul class='dropdown-menu'></ul>" 
    } 
    $(".test").html(listmenus); 
}); 
$(document).ready(function(){ 
    var listslides = ""; 
    for (var s = 0; s < slidelist.List.length; s++){ 
     listslides += "<li><a href='#' class='link'>" + slidelist.List[s].slidetitle + "</a></li>" 
    } 
    $(".dropdown-menu").html(listslides); 
}); 
+0

份額預期輸出 –

+0

https://jsfiddle.net/wdj7Ltc7/ ......我不看看這不工作?我可以給你一個答案,使它更好看的代碼和使用更多的jQuery功能,但輸出似乎是你的願望? – SpYk3HH

+0

使用JSON數據。我希望模塊按照這種方式填充:模塊1(幻燈片1,2,3,4),模塊2(幻燈片5,6),模塊3(幻燈片7,8,9)。等等使用mod數據或者我不知道的另一種技術:/ – dav

回答

1

添加模塊mod作爲DOM對象的屬性將讓您選擇它以後辨別該幻燈片就去哪裏。

var menulist = {"List" : [{"menutitle" : "Module 1", "mod" : "1"},{"menutitle" : "Module 2", "mod" : "2"},{"menutitle" : "Module 3", "mod" : "3"},{"menutitle" : "Module 4", "mod" : "4"},{"menutitle" : "Module 5", "mod" : "5"}]} 
 

 
var slidelist = {"List" : [{"slidetitle" : "Slide 1", "mod" : "1"},{"slidetitle" : "Slide 2", "mod" : "1"},{"slidetitle" : "Slide 3", "mod" : "1"},{"slidetitle" : "Slide 4", "mod" : "1"},{"slidetitle" : "Slide 5", "mod" : "2"},{"slidetitle" : "Slide 6", "mod" : "2"},{"slidetitle" : "Slide 7", "mod" : "3"},{"slidetitle" : "Slide 8", "mod" : "3"},{"slidetitle" : "Slide 9", "mod" : "3"},{"slidetitle" : "Slide 10", "mod" : "4"},{"slidetitle" : "Slide 11", "mod" : "4"},{"slidetitle" : "Slide 12", "mod" : "5"},{"slidetitle" : "Slide 13", "mod" : "5"},{"slidetitle" : "Slide 14", "mod" : "5"},{"slidetitle" : "Slide 15", "mod" : "5"}]} 
 

 
$(document).ready(function(){ 
 
    var listmenus = ""; 
 
    for (var t = 0; t < menulist.List.length; t++){ 
 
     listmenus += "<a href='#' class='dropdown-toggle' data-toggle='dropdown'>" + menulist.List[t].menutitle + "<span class='caret'></span></a><ul data-value=\""+menulist.List[t].mod+"\" class='dropdown-menu'></ul>" 
 
    } 
 
    $(".test").html(listmenus); 
 

 
    for (var s = 0; s < slidelist.List.length; s++){ 
 
     $(".dropdown-menu[data-value=" + slidelist.List[s].mod + "]").append("<li><a href='#' class='link'>" + slidelist.List[s].slidetitle + "</a></li>"); 
 
    } 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="test"></div>

0

使用data-*屬性,它持有各ul後來國防部價值得到UL基於該值。您可以使用一個對象來保存生成的HTML字符串。

var menulist = { 
 
    "List": [{ 
 
    "menutitle": "Module 1", 
 
    "mod": "1" 
 
    }, { 
 
    "menutitle": "Module 2", 
 
    "mod": "2" 
 
    }, { 
 
    "menutitle": "Module 3", 
 
    "mod": "3" 
 
    }, { 
 
    "menutitle": "Module 4", 
 
    "mod": "4" 
 
    }, { 
 
    "menutitle": "Module 5", 
 
    "mod": "5" 
 
    }] 
 
} 
 

 
var slidelist = { 
 
    "List": [{ 
 
    "slidetitle": "Slide 1", 
 
    "mod": "1" 
 
    }, { 
 
    "slidetitle": "Slide 2", 
 
    "mod": "1" 
 
    }, { 
 
    "slidetitle": "Slide 3", 
 
    "mod": "1" 
 
    }, { 
 
    "slidetitle": "Slide 4", 
 
    "mod": "1" 
 
    }, { 
 
    "slidetitle": "Slide 5", 
 
    "mod": "2" 
 
    }, { 
 
    "slidetitle": "Slide 6", 
 
    "mod": "2" 
 
    }, { 
 
    "slidetitle": "Slide 7", 
 
    "mod": "3" 
 
    }, { 
 
    "slidetitle": "Slide 8", 
 
    "mod": "3" 
 
    }, { 
 
    "slidetitle": "Slide 9", 
 
    "mod": "3" 
 
    }, { 
 
    "slidetitle": "Slide 10", 
 
    "mod": "4" 
 
    }, { 
 
    "slidetitle": "Slide 11", 
 
    "mod": "4" 
 
    }, { 
 
    "slidetitle": "Slide 12", 
 
    "mod": "5" 
 
    }, { 
 
    "slidetitle": "Slide 13", 
 
    "mod": "5" 
 
    }, { 
 
    "slidetitle": "Slide 14", 
 
    "mod": "5" 
 
    }, { 
 
    "slidetitle": "Slide 15", 
 
    "mod": "5" 
 
    }] 
 
} 
 

 

 
$(document).ready(function() { 
 
    var listmenus = ""; 
 
    for (var t = 0; t < menulist.List.length; t++) { 
 
    listmenus += "<a href='#' class='dropdown-toggle' data-toggle='dropdown'>" + menulist.List[t].menutitle + "<span class='caret'></span></a><ul data-mod='" + menulist.List[t].mod + "' class='dropdown-menu'></ul>" 
 
    } 
 
    $(".test").html(listmenus); 
 

 
    var listslides = {}; 
 
    for (var s = 0; s < slidelist.List.length; s++) { 
 
    listslides[slidelist.List[s].mod] = listslides[slidelist.List[s].mod] || ''; 
 
    listslides[slidelist.List[s].mod] += "<li><a href='#' class=;'link'>" + slidelist.List[s].slidetitle + "</a></li>" 
 
    } 
 

 
    Object.keys(listslides).forEach(function(l) { 
 
    $('.dropdown-menu[data-mod="' + l + '"]').html($('<ul/>', { 
 
     id: l, 
 
     html: listslides[l] 
 
    })) 
 
    }) 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="test"></div>

0

我的建議是基於Creating New Elements directly in jQuery像:

var dp = $('<div/>', {class: 'dropdown'}) 
     .append($('<button/>', { 
      class: 'btn btn-default dropdown-toggle', 
      type: 'button', 
      id: 'dropdownMenu' + index, 
      'data-toggle': 'dropdown', 
      'aria-haspopup': true, 
      'aria-expanded': true 
     }).append(ele.menutitle).append($('<span/>', {class: 'caret'}))) 
     .append($('<ul/>', { 
      class: 'dropdown-menu', 
      'aria-labelledby': 'dropdownMenu' + index 
     })); 

的片段:

var menulist = { 
 
    "List": [ 
 
    {"menutitle": "Module 1", "mod": "1"}, 
 
    {"menutitle": "Module 2", "mod": "2"}, 
 
    {"menutitle": "Module 3", "mod": "3"}, 
 
    {"menutitle": "Module 4", "mod": "4"}, 
 
    {"menutitle": "Module 5", "mod": "5"} 
 
    ] 
 
} 
 

 
var slidelist = { 
 
    "List": [ 
 
    {"slidetitle": "Slide 1", "mod": "1"}, 
 
    {"slidetitle": "Slide 2", "mod": "1"}, 
 
    {"slidetitle": "Slide 3", "mod": "1"}, 
 
    {"slidetitle": "Slide 4", "mod": "1"}, 
 
    {"slidetitle": "Slide 5", "mod": "2"}, 
 
    {"slidetitle": "Slide 6", "mod": "2"}, 
 
    {"slidetitle": "Slide 7", "mod": "3"}, 
 
    {"slidetitle": "Slide 8", "mod": "3"}, 
 
    {"slidetitle": "Slide 9", "mod": "3"}, 
 
    {"slidetitle": "Slide 10", "mod": "4"}, 
 
    {"slidetitle": "Slide 11", "mod": "4"}, 
 
    {"slidetitle": "Slide 12", "mod": "5"}, 
 
    {"slidetitle": "Slide 13", "mod": "5"}, 
 
    {"slidetitle": "Slide 14", "mod": "5"}, 
 
    {"slidetitle": "Slide 15", "mod": "5"} 
 
    ] 
 
} 
 

 

 
menulist.List.forEach(function (ele, index) { 
 
    // 
 
    // Create the main dropdown element 
 
    // 
 
    var dp = $('<div/>', {class: 'dropdown'}) 
 
    .append($('<button/>', { 
 
    class: 'btn btn-default dropdown-toggle', 
 
    type: 'button', 
 
    id: 'dropdownMenu' + index, 
 
    'data-toggle': 'dropdown' 
 
    }).append(ele.menutitle + ' ').append($('<span/>', {class: 'caret'}))) 
 
    .append($('<ul/>', { 
 
    class: 'dropdown-menu', 
 
    'aria-labelledby': 'dropdownMenu' + index 
 
    })); 
 
    var cachedInsertPoint = dp.find('ul'); 
 
    slidelist.List.filter((e, i) => { return e.mod == ele.mod }).forEach(function(e, idx) { 
 
    // 
 
    // for each corresponding element in the second array 
 
    // add the relative option 
 
    // 
 
    cachedInsertPoint.append($('<li/>').append($('<a/>', { 
 
     href: '#', 
 
     text: e.slidetitle 
 
    }))); 
 
    }); 
 
    $('body').append(dp); 
 
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
 
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

0

你似乎試圖做的事很簡單。我認爲你正試圖將分表分成合適的父母。只要在與父循環相同的範圍內運行循環即可。那麼你知道什麼屬於哪裏!

這裏是你會如何使用幾個jQuery的「權力」,如$.each$.('<element />'),並$.fn.addClass()做到這一點:

僅供參考,沒有所有的意見和拆分項目的描述,後面的代碼可能如下所示簡短:甚至可以整理得更少!

$(function() { 
    $.each(listMenu.List, function(ind, arr) { 
     var a = $('<a />', { 'data-toggle': 'dropdown', href: 'javascript:void(0)' }).addClass('dropdown-toggle').text(arr.menutitle), 
      span = $('<span />').addClass('caret').appendTo(a), 
      ul = $('<ul />'); 
     $.each(listSlide.List, function(slideInd, slideArr) { 
      if (slideArr.mod == arr.mod) { 
       var li = $('<li />').appendTo(ul); 
       $('<a />', { href: 'javascript:void(0)' }).addClass('link').text(slideArr.slidetitle).appendTo(li); 
      } 
     }); 
     $('.test').append(a, ul); 
    }); 
}); 

例與Explination

var listMenu = JSON.parse('{"List":[{"menutitle":"Module 1","mod":"1"},{"menutitle":"Module 2","mod":"2"},{"menutitle":"Module 3","mod":"3"},{"menutitle":"Module 4","mod":"4"},{"menutitle":"Module 5","mod":"5"}]}'), 
 
\t listSlide = JSON.parse('{"List":[{"slidetitle":"Slide 1","mod":"1"},{"slidetitle":"Slide 2","mod":"1"},{"slidetitle":"Slide 3","mod":"1"},{"slidetitle":"Slide 4","mod":"1"},{"slidetitle":"Slide 5","mod":"2"},{"slidetitle":"Slide 6","mod":"2"},{"slidetitle":"Slide 7","mod":"3"},{"slidetitle":"Slide 8","mod":"3"},{"slidetitle":"Slide 9","mod":"3"},{"slidetitle":"Slide 10","mod":"4"},{"slidetitle":"Slide 11","mod":"4"},{"slidetitle":"Slide 12","mod":"5"},{"slidetitle":"Slide 13","mod":"5"},{"slidetitle":"Slide 14","mod":"5"},{"slidetitle":"Slide 15","mod":"5"}]}'); 
 

 
// this shorthand expression is same as `$(document).ready(function(){`, FYI, you don't have to write this over and over, once is enough. 
 
$(function() { 
 
\t // filter through the parent list that will make each list 
 
\t $.each(listMenu.List, function(ind, arr) { 
 
\t \t // basics to making an element object in jQuery: 
 
\t \t // `$("<tagName />", { attributes: value })` 
 
\t \t var a = $('<a />', { 'data-toggle': 'dropdown', href: 'javascript:void(0)' }).text(arr.menutitle), \t // create head link element \t // use of javascript:void(0) tends to be prefered over # unles u have specific purpose for such 
 
\t \t \t span = $('<span />').appendTo(a), \t // create caret span & insert into our a tag 
 
\t \t \t ul = $('<ul />') // create ul element 
 
\t \t 
 
\t \t // add Classes // only did this here for simplicity of view 
 
\t \t // Just FYI, this can be done in one line when establish variable above. 
 
\t \t // Return is always the jQuery Element Object 
 
\t \t a.addClass('dropdown-toggle'); 
 
\t \t span.addClass('caret'); 
 
\t \t 
 
\t \t // no need for an extra loop after this one, lets just loop through our sub list here 
 
\t \t // quick and easy and you can associate better what belongs where without use of extra ID's and such 
 
\t \t $.each(listSlide.List, function(slideInd, slideArr) { 
 
\t \t \t if (slideArr.mod == arr.mod) { \t // check if item belongs in this list 
 
\t \t \t \t var li = $('<li />').appendTo(ul), \t // create li element & insert into our list 
 
\t \t \t \t \t liA = $('<a />', { href: 'javascript:void(0)' }).addClass('link').text(slideArr.slidetitle).appendTo(li); \t // create and append 
 
\t \t \t } 
 
\t \t }); 
 
\t \t 
 
\t \t $('.test').append(a, ul); 
 
\t }); 
 
\t 
 
\t // Just for a little fun and further education, let's add some functionality! 
 
\t // Here, I'll assign "events" to slide the list up and down, 
 
\t // but the elements are added "dynamically", so I'll instead assign the events to 
 
\t // a "static parent" (in this case the DOM) and associate what elements 
 
\t // the event belongs to with my 2nd parameter. 
 
\t // Read more about this here: http://api.jquery.com/on/ 
 
\t $(document) 
 
\t \t .on('click', '.dropdown-toggle', function(e) { 
 
\t \t \t // this is the HTML element, 
 
\t \t \t // wrapping it in $() gives us jQuery object methods! 
 
\t \t \t // Read about the .next method here: http://api.jquery.com/next/ 
 
\t \t \t // I use $.stop to stop and complete any animation in progress (multiclicking issues) 
 
\t \t \t // Read about .stop here: http://api.jquery.com/stop/ 
 
\t \t \t // I use slideToggle to make the menu go up and down! 
 
\t \t \t // Read about .slideToggle here: http://api.jquery.com/slideToggle/ 
 
\t \t \t $(this).next('ul').stop(true, true).slideToggle(); 
 
\t \t }) // finally, notice i did not close this `);` 
 
\t \t \t // This is because I wanted to show you, you can use jQuery "chaining" 
 
\t \t \t // to continue. So, if you wanted to add more events for other elements, 
 
\t \t \t // you would just put a `.on(` and keep going, like so: 
 
\t \t \t // 
 
\t \t \t // $(document) 
 
\t \t \t //  .on('event', 'selector', function(e) {}) 
 
\t \t \t //  .on('event', 'selector', function(e) {}) 
 
\t \t \t //  .on('event', 'selector', function(e) {}) 
 
\t \t \t //  .on('event', 'selector', function(e) {}) 
 
\t \t \t //  .on('event', 'selector', function(e) {}) 
 
});
.test > a { display: block; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="test"></div>