我正在尝试构建一个对象数组,以便在cookie中保存菜单的状态,但它没有更新,因为它没有找到包含我需要更新可见性的对象的正确索引。我做错了什么和/或你能指出我正确的方向吗?
$(document).ready(function() {
var menu = new Array();
$("#vertical-nav .head").click(function() {
var c = $(this).next().attr('name');
$(this).next().slideToggle("slow", function() {
if ( $(this).next().is(':visible') ) {
menu.push({
name: c,
visible: true,
});
} else {
var index = $.inArray(c, menu);
console.log("INDEX: " + index);
menu[index] = { name: c, visible:false };
}
});
console.log(menu);
});
});
这就是我最终的目标:
$(document).ready(function() {
var menu = new Array();
if ( $.cookie('menu') ) {
var items = JSON.parse($.cookie('menu'));
for ( var item in items ) {
if ( items[item].visible ) {
$("div[name='" + items[item].name + "']").show();
}
menu.push(items[item]);
}
}
$("#vertical-nav .head").click(function() {
var c = $(this).next().attr('name');
if ( $(this).next().is(":visible") ) {
hide(this, c);
} else {
show(this, c);
}
});
function show(obj, c) {
$(obj).next().slideDown('slow', function() {
var elementExists = false;
if ( menu.length > 0 ) {
for ( var item in menu ) {
if ( menu[item].name == c ) {
elementExists = true;
menu[item].visible = true;
}
}
}
if ( !elementExists ) {
menu.push({
name: c,
visible: true,
});
}
$.cookie('menu', JSON.stringify(menu));
});
}
function hide(obj, c) {
$(obj).next().slideUp('slow', function() {
if ( menu.length > 0 ) {
for ( var item in menu ) {
if ( menu[item].name == c ) {
menu[item].visible = false;
}
}
}
$.cookie('menu', JSON.stringify(menu));
});
}
});
答案 0 :(得分:1)
您可以轻松地执行此操作:
if (menu.length > 0) {
for (var item in menu) {
if (menu[item].name=="some text") alert("Found it!");
}
}
我要考虑的是代替[{name: "item"; visible: true}]
切换到键/值对。然后,您可以使用{"item": true}
,但这仅限于存储可见值,并且密钥中不能存储额外信息。要解决此问题,请尝试{" item":{visible:true}}。以下是使用此方法在JS中检测的示例:
if (menu.length > 0) {
for (var item in menu) {
var strVisible="hidden";
if (menu[item].visible==true) strVisible="visible";
alert(item+" is "+strVisible);
}
}