欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

mvc3里,用jQuery+json配合实现导航菜单

程序员文章站 2022-03-01 17:45:02
...

最近在做个项目,首页的导航菜单有三级,之前没觉得有多难,后来实现的时候,发现在视图嵌套.net循环 太影响效率了。在查阅资料之后决定用jQuery+json来实现。废话不多说,上代码:

//后台controller的一个action,返回封装好的json。这里我放的是实例类的集合。
public ActionResult getJsonNav()
{
    HomeService home = new HomeService();
    return Json(home.getNavGoods());
}


这里是前台接收json并处理的代码,用ajax。

var jsonNav;
$.ajax({
    url: ´/Home/getJsonNav´, //请求的某个action的地址
    datatype: "json", //只有指定为json下面才可以直接用返回的json数据,否则要转化
    type: ´post´,
    success: function (data) {
        //forTree(data); //该函数中处理json格式的文章数据data;
        jsonNav = data;
        forTree(data);
    },
    beforeSend: function () {
    }
})

递归实现获取无级树数据并生成DOM结构
var forTree = function (data) {
    $.each(data, function (i, item) {
        $(´#IndexBC_left´).append(´<div class="IndexBC_left1"><a href="#"><img src="/Content/img/shouye_tubiao´ + item.ID + ´.png"/>´ + item.TYPE_NAME + ´</a></div>´);
        forSubTree(item.isLeaf);
});

//添加悬停事件,显示次级菜单
if (!$("#IndexBC_left").is(":animated")) {//首先判断是否处于动画状态
    var lis = $("#IndexBC_left .IndexBC_left1");
    //遍历文档树
    lis.each(function (i) {
        $(this).bind("mouseover", i, function () {
            $("#showNav").show();
            var hv = $("#allNav").children().eq(i);
            var str = ´<ul>´ + hv.html();
            str += ´</ul><h4><a href="#">查看全部商品分类</a></h4>´
            $("#showNav").html(str);
            $("#showNav").bind("mouseover", function () {
                $("#showNav").show();
            })
        });
    });
    //控制鼠标移除事件
    $("#IndexBC_left,#showNav").mouseleave(function () {
        $("#showNav").hide();
    });
    }
};
var forSubTree = function (subdata) {
    var str = ´<ul>´;
    $.each(subdata, function (i, item) {
        str += ´<li><p>´ + item.TYPE_NAME + ´</p><br/>´;
        $.each(item.isLeaf, function (i, em) {
        str += ´<a href="SubHome/items?ID=´ + em.ID + ´">´ + em.TYPE_NAME + ´</a>´;
    });
    str += ´</li>´;
    });
    str += ´</ul>´;
    $(´#allNav´).append(str);
};


这里是前台html代码:,样式就不贴了。相信大概思路看懂了就行

<div class="IndexBC_left" id="IndexBC_left">
</div>
<!-- 子菜单 -->
<div class="SY" id="showNav">
<!--<h4><a href="#">查看全部商品分类</a></h4>-->
</div>
<!-- 隐藏菜单 -->
<div id=´allNav´ style="display: none;">
</div>


最后感谢龙龙给我的帮助哈