2017-05-29 100 views
0

我正在构建一个WordPress插件,它允许用户重新创建WordPress管理菜单。 WordPress提供了一个名为global $submenu;的全局变量,其中包含菜单的所有子菜单项。所以我开发了一个Javascript界面​​,允许人们编辑这个菜单。所以我需要做的是让用户编辑并将其重新推回到全局变量中。使用变量作为对象名称并将数组推入对象

当我输出该变量到JavaScript控制台我得到这样的结构:

Object {index.php: Object, upload.php:Object} 
 

 
     index.php: Object 
 
     0: Array(3) 
 
     0: "Home" 
 
     1: "read" 
 
     2: "index.php" 
 

 
     10: Array(3) 
 
     0: "Updates" 
 
     1: "update_core" 
 
     2: "update-core.php" 
 
    
 
     upload.php: Object 
 
     5: Array(3) 
 
     0: "Library" 
 
     1: "upload_files" 
 
     2: "upload.php" 
 

 
     10: Array(3) 
 
     0: "Add New" 
 
     1: "upload_files" 
 
     2: "media-new.php"

这是输出的一个例子缩短只给你一个想法。因此它包含一个包含2个对象的对象,而这2个对象每个包含2个数组(这2个对象名称是与相关顶级菜单项匹配的索引值,而数组中的值是子属性菜单项)。

所以在Javascript中我有一个循环收集这些对象名称,即index.php文件和upload.php的,然后我有一个循环采集到的对象的子菜单的属性里面一个循环:

$('#admin-menu-manager > li > ul').each(function(index) { 
 
    //this gets the object name e.g. index.php or upload.php  
 
    var associatedTopLevelMenuItemLabel = $(this).parent().find('.menu-url').val(); 
 

 
    var $this = $(this); 
 
    var $subLevelUl = $(this).find("li"); 
 

 
    $($subLevelUl).each(function(index) { 
 
    //these below variables get the properties of the sub menu 
 
    //menu item property 1 
 
    var subLevelMenuItemLabel = $(this).find('.menu-label').val(); 
 
    //menu item property 2 
 
    var subLevelMenuItemCapability = $(this).find('.menu-capability').val(); 
 
    //menu item property 3 
 
    var subLevelMenuItemLink = $(this).find('.menu-url').val(); 
 
    //now I am creating an array to store the sub level properties 
 
    var subLevelMenuItemArray = [subLevelMenuItemLabel, subLevelMenuItemCapability, subLevelMenuItemLink]; 
 

 
    }); 
 

 
});

这段代码的问题是: 一)我不知道如何创建一个使用变量“associatedTopLevelMenuItemLabel”,因为它的名字的对象,而且, b)我不知道如何把这些“ subLevelMenuItemArray'数组放入对象中。

我知道如何将数组推入另一个数组,但我相信您不能将数组推送到此对象中。我试图做甚至可能在Javascript中,或者我在这里吠叫错误的树,我应该使用PHP?

+0

** JavaScript对象**它只是一个* hashset * https://www.w3schools.com/js/js_objects.asp – 2017-05-29 05:59:35

+0

嗨anete.anetes感谢您的评论,你是说我不需要担心实际创建对象和数组我只需要创建一个看起来像是对象和数组的字符串?我很抱歉,我不熟悉哈希集,我仍然在学习。但我认为你所说的话是有道理的。因为我实际上并不需要利用javascript对象和数组的功能,所以我只需要让它看起来像我想的那样。 – user1190132

+1

是的,你可以通过字符串'object ['propname']'来访问你的对象的属性,并且你可以将'propname'存储在某个变量的内部 – 2017-05-29 06:03:36

回答

0

谢谢anete.anetes您的意见。我认为在这种情况下,我试图非常显着地推翻事情。因为我实际上并不需要创建真正的数组或对象,所以我应该只是试图创建一个对象的字符串表示形式。所以我可以用我现有的循环创建一个简单的变量和广告。然后,如果需要,访问该字符串的这些属性。