我正在尝试将以前的 asp:menu 项转换为 javascript。这是我写的 javascript 代码:
function GetMainMenu() {
var html = '';
var finalHTML = '';
finalHTML += '<div class="dropdown" style="width:100%">';
finalHTML += '<ul class="nav navbar-nav navbar-left">';
finalHTML += '<li class="dropdown">';
finalHTML += '<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" style="height:18px;color:#003366">';
finalHTML += 'Main Menu<span class="caret"></span></a>';
var MainMenu = null;
MainMenu = new ActiveXObject("Microsoft.XMLDOM");
MainMenu = readXml("/public/FHSMenu.xml");
finalHTML += buildList(MainMenu.getElementsByTagName("Menu"));
finalHTML += '</li>';
finalHTML += '</ul>';
finalHTML += '</div>';
alert(finalHTML);
document.getElementById("preMainMenu").innerHTML = finalHTML;
var x = null;
x = new ActiveXObject("Microsoft.XMLDOM");
var item;
function buildList(data) {
html += '<ul class="dropdown-menu" role="menu">';
x = data;
for (item = 0; item < x.length ; item++) {
var y = x[item].getElementsByTagName("Title")[0].childNodes[0].nodeValue;
var u = null;
try {
u = x[item].getElementsByTagName("URL")[0].childNodes[0].nodeValue;
} catch (e) {
u = '';
}
if (u != '') {
html += '<li><a href="' + u + '" style="font-size:12px;color:#003366" >' + y + '</a></li>';
} else {
html += '<li class="dropdown-submenu" role="menu" >';
html += '<a href="#" data-toggle="dropdown" style="font-size:12px;color:#003366" >' + y + '</a>';
html += '</li>';
//var SubMenu = x[item].getElementsByTagName("Menu");
//if (SubMenu != undefined && SubMenu.length > 0) {
// html += buildList(SubMenu); // Submenu found. Calling recursively same method (and wrapping it in a div)
//}
}
}
html += '</ul>';
return html;
}
}
XML 文件是为与 ASP:MENU 一起使用而编写的,并且仍在与遗留 Web 应用程序一起使用,因此我需要一种方法以递归方式在下拉方法中显示菜单,以便用户仍然会看到与以下内容基本相同的下拉菜单子(monad)菜单。到目前为止,我无法显示初始根菜单,然后调用相同的例程从根菜单中获取任何子菜单(如果这有意义的话)。目前警报显示标签中具有“菜单”的所有元素而不仅仅是少数根元素。
<?xml version="1.0" standalone="yes"?> <LeftNavMenu> <Menu>
<MenuId>63</MenuId>
<Title>Clinical Care</Title>
<URL />
<ZOrder>0</ZOrder>
<Menu>
<MenuId>1660</MenuId>
<ParentId>63</ParentId>
<Title>Ambulatory EHR</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
<Menu>
<MenuId>3649</MenuId>
<ParentId>63</ParentId>
<Title>Angel Eye</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
<Menu>
<MenuId>1610</MenuId>
<ParentId>63</ParentId>
<Title>Clarity</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu> </Menu> <Menu>
<MenuId>3</MenuId>
<Title>Corporate</Title>
<URL />
<ZOrder>0</ZOrder>
<Menu>
<MenuId>1487</MenuId>
<ParentId>3</ParentId>
<Title>Become an Organ Donor</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
<Menu>
<MenuId>1845</MenuId>
<ParentId>3</ParentId>
<Title>Brand Style Guide</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
<Menu>
<MenuId>2153</MenuId>
<ParentId>3</ParentId>
<Title>Calendars</Title>
<URL />
<ZOrder>0</ZOrder>
<Menu>
<MenuId>2155</MenuId>
<ParentId>2153</ParentId>
<Title>Freemanhealth.com Events</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
<Menu>
<MenuId>2391</MenuId>
<ParentId>2153</ParentId>
<Title>Kronos Calendar</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
<Menu>
<MenuId>2158</MenuId>
<ParentId>2153</ParentId>
<Title>Payroll</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
<Menu>
<MenuId>2156</MenuId>
<ParentId>2153</ParentId>
<Title>Professional Development</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
<Menu>
<MenuId>2157</MenuId>
<ParentId>2153</ParentId>
<Title>Room Scheduling</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
</Menu>
<Menu>
<MenuId>8</MenuId>
<ParentId>3</ParentId>
<Title>Car Pool</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
<Menu>
<MenuId>1280</MenuId>
<ParentId>3</ParentId>
<Title>CMN (Children's Miracle Network)</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu>
<Menu>
<MenuId>181</MenuId>
<ParentId>3</ParentId>
<Title>Employee Handbook</Title>
<URL>some_link</URL>
<ZOrder>0</ZOrder>
</Menu> </Menu> </LeftNavMenu>
最佳答案
我终于拼凑了递归加载 XML 菜单文件的方法,虽然因为我没有得到响应,这可能对尝试将 asp:menu 转换为 javascript 的其他人有用,但我想展示它是如何实现的完成。这是代码:
<script type="text/javascript">
function readXml(xmlFile) {
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.load(xmlFile);
var tagObj = xmlDoc.getElementsByTagName("Menu");
var menuidValue = tagObj[0].getElementsByTagName("MenuId")[0].childNodes[0].nodeValue;
try {
var parentidValue = tagObj[0].getElementsByTagName("Parentid")[0].childNodes[0].nodeValue;
} catch (err) {
var parentidValue = 0;
}
var titleValue = tagObj[0].getElementsByTagName("Title")[0].childNodes[0].nodeValue;
try {
var urlValue = tagObj[0].getElementsByTagName("URL")[0].childNodes[0].nodeValue;
} catch (err) {
var urlValue = '';
}
var zorderValue = tagObj[0].getElementsByTagName("ZOrder")[0].childNodes[0].nodeValue;
return xmlDoc
}
$(document).ready(function () {
GetMainMenu();
});
function buildList(data) {
var item;
var html = '';
html += '<ul class="dropdown-menu" role="menu">';
for (item = 0; item < data.length ; item++) {
var Title = data[item].getElementsByTagName("Title")[0].childNodes[0].nodeValue;
var URL = null;
try {
URL = data[item].getElementsByTagName("URL")[0].childNodes[0].nodeValue;
} catch (e) {
URL = '';
}
if (URL == '') {
html += '<li class="dropdown-submenu" role="menu" >';
html += '<a href="#" data-toggle="dropdown" style="font-size:12px;color:#003366" >' + Title + '</a>';
html += buildList(data[item].getElementsByTagName("Menu")); // Submenu found. Calling recursively same method
html += '</li>';
} else {
html += '<li><a href="' + URL + '" style="font-size:12px;color:#003366" >' + Title + '</a></li>';
}
}
html += '</ul>';
return html;
}
function GetMainMenu() {
var html = '';
var finalHTML = '';
finalHTML += '<div class="dropdown" style="width:100%">';
finalHTML += '<ul class="nav navbar-nav navbar-left">';
finalHTML += '<li class="dropdown">';
finalHTML += '<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" style="height:18px;color:#003366">';
finalHTML += 'Main Menu<span class="caret"></span></a>';
var MainMenu = null;
MainMenu = new ActiveXObject("Microsoft.XMLDOM");
MainMenu = readXml("/public/FHSMenu.xml");
finalHTML += buildList(MainMenu.childNodes[1].childNodes,html);
finalHTML += '</li>';
finalHTML += '</ul>';
finalHTML += '</div>';
document.getElementById("preMainMenu").innerHTML = finalHTML;
}
</script>
关于javascript - 如何以递归方式将 XML 列表显示为以前的 ASP :MENU did?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35039760/