The improved version optimizes the problem by adding a menu to a simple JavaScript code. At the same time make the HTML page is very concise, only need to write 2 lines of code can! O (∩_∩) o
1. Use the premises, introduce a CSS file in the HTML page, and a JavaScript file. As follows:
Copy Code code as follows:
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 transitional//en" >
<HTML>
<HEAD>
<TITLE>Menu</TITLE>
<link type= "Text/css" rel= "stylesheet" href= "Menu.css" >
</HEAD>
<BODY>
<div><script src= "Menu.js" ></script></div>
</BODY>
</HTML>
Introduce CSS file: <link type= "Text/css" rel= "stylesheet" href= "Menu.css" >, MENU.CSS code See after
Introducing JavaScript Files: <script src= "Menu.js" ></script>
2. Define menu code as follows:
Copy Code code as follows:
if (document.getElementById) {
var root = new Root ();
var m1 = new Menu ("File", "alert (This.innertext);");
Root.add (M1);
var M11 = new MenuItem ("new");
M1.add (M11);
M1.add (New MenuItem ("Open", "alert (' Open file ');");
var M12 = new MenuItem ("Save");
M1.add (M12);
M1.add (New MenuItem ("Save as"));
M1.add (New MenuItem ("close"));
M1.add (New MenuItem (""));
var m2 = new Menu ("Edit");
Root.add (m2);
Root.tostring ();
}
Description
1) var root = new Root ();
Root.tostring ();
Fixed format
2) Declaration Menu:
var m1 = new Menu ("File", "alert (This.innertext);");
The menu displays the name "File", and the OnClick event is alert (This.innertext);
Root.add (M1);
The first Level menu (the menu that the page initially displays) is placed under root, using the Add () method
var M11 = new MenuItem ("new");
M1.add (M11);
Declares the submenu "New" for "File"
M1.add (New MenuItem ("Open", "alert (' Open file ');");
Declares "File" submenu "Open"
The above code can complete the menu add function.
Code files:
<1> Menu.css
Copy Code code as follows:
#menubar {
Font-family:verdana;
font-size:12px;
margin:1px;
}
#menubar Li {
Float:left;
position:relative;
Text-align:left;
}
/* Each menu item style * *
#menubar Li a {
Border-style:none;
Color:black;
Display:block;
width:150px;
height:20px;
line-height:20px;
padding-left:10px;
Text-decoration:none;
}
/* the ' the ' the ' the ' the ' the ' displays ' Default/
#menubar. menumain{
Border-color: #C0C0C0;
border-width:1px;
Border-style:solid;
}
/* the ' leve style when ' mouse on it * *
#menubar Li a:hover{
Background-color: #efefef;
Text-decoration:underline;
}
/* The second Level menu block style * *
#menubar Li ul{
Background-color: #efefef;
Border-style:none;
Display:none;
Position:absolute;
top:20px;
left:-40px;
margin-top:2px;
width:150px;
}
/* The Sub menu item style when mouse on it * *
#menubar Li ul li a:hover {
Text-decoration:underline;
padding-left:20px;
}
/* The third or more level menu block style */
#menubar Li ul Li ul
Display:none;
Position:absolute;
top:0px;
left:150px;
margin-top:0;
margin-left:0;
width:150px;
}
<2>menu.js
Copy Code code as follows:
var menuconfig = {
DefaultText: "Menu Item",
DefaultAction: "javascript:void (0);",
Defaultmenucssstyle: "Menumain"
};
var Menuhandler = {
idcounter:0,
Idprefix: "menu-",
Getid:function () {return this.idprefix + this.idcounter++;},
Inserthtmlbeforeend:function (node, SHTML) {
if (node.insertadjacenthtml!= null) {
node.insertadjacenthtml (' BeforeEnd ', SHTML);
Return
}
var df; DocumentFragment
var r = Node.ownerDocument.createRange ();
R.selectnodecontents (node);
R.collapse (FALSE);
DF = r.createcontextualfragment (SHTML);
Node.appendchild (DF);
}
}
function Displaysubmenu (LI) {
var submenu = li.getelementsbytagname (' ul ') [0];
if (submenu)
SubMenu.style.display = ' block ';
}
function Hidesubmenu (LI) {
var submenu = li.getelementsbytagname (' ul ') [0];
if (submenu)
SubMenu.style.display = ' None ';
}
/******************************************
* Funciont Name:menuabstractnode
* Description:menuabstractnode Class
* @param {String} ptext
* @param {String} paction
* @Return:
*******************************************/
function Menuabstractnode (Ptext, paction) {
This.text = Ptext | | Menuconfig.defaulttext;
this.action = Paction | | Menuconfig.defaultaction;
This.id = Menuhandler.getid ();
This.childnodes = [];
}
MenuAbstractNode.prototype.add = function (node) {
This.childnodes[this.childnodes.length] = node;
}
/******************************************
* Funciont name:tostring
* Description:generate HTML Code
* @param
* @param
* @Return:
*******************************************/
MenuAbstractNode.prototype.toString = function () {
var str = "<li id=\" "+ this.id +" \ "onmouseover=\" Displaysubmenu (this) \ "Onmouseout=\" Hidesubmenu (this) \ ><a h Ref=\ "#\";
if (this.type== "menu") {
str = str + "class=\" "+ This.cssstyle +" "";
}
str = str + "onclick=\" "+this.action+" \ ">" +this.text+ "</a>";
var sb = [];
for (var i = 0; i < this.childNodes.length; i++) {
Sb[i] = this.childnodes[i].tostring ();
}
if (sb.length>0) {
str = str + "<ul>" + Sb.join ("") + "</ul>"
}
return str + "</li>";
}
/******************************************
* Funciont Name:menu
* Description:menu Class
* @param {String} ptext
* @param {String} paction
* @param {String} pcssstyle
* @Return:
*******************************************/
function Menu (Ptext, Paction,pcssstyle) {
This.base = Menuabstractnode;
This.base (ptext,paction);
This.type = "Menu";
This.cssstyle = Pcssstyle | | Menuconfig.defaultmenucssstyle;
}
Menu.prototype = new Menuabstractnode;
/******************************************
* Funciont Name:menuitem
* Description:menuitem Class
* @param {String} ptext
* @param {String} paction
* @Return:
*******************************************/
function MenuItem (Ptext, paction) {
This.base = Menuabstractnode;
This.base (ptext,paction);
This.type = "MenuItem";
}
Menuitem.prototype = new Menuabstractnode;
/******************************************
* Funciont Name:root
* Description:root Class
* @Return:
*******************************************/
function Root () {
This.id = "menubar";
This.childnodes=[];
}
Root.prototype = new Menuabstractnode;
Root.prototype.toString = function () {
document.write ("<div id= ' menu ' ><ul id=\" "+root.id+" \ "> </ul> </div>");
for (var i=0; i<this.childnodes.length; i++) {
Menuhandler.inserthtmlbeforeend (document.getElementById (root.id), this.childnodes[i].tostring ());
}
}
if (document.getElementById) {
var root = new Root ();
var m1 = new Menu ("File", "alert (This.innertext);");
Root.add (M1);
var M11 = new MenuItem ("New", "alert (This.innertext);");
M1.add (M11);
M1.add (New MenuItem ("Open", "alert (' Open file ');");
var M12 = new MenuItem ("Save");
M1.add (M12);
M1.add (New MenuItem ("Save as"));
M1.add (New MenuItem ("close"));
M1.add (New MenuItem (""));
var m2 = new Menu ("Edit");
Root.add (m2);
var M22 = new MenuItem ("Select All");
M2.add (M22);
M2.add (New MenuItem ("cut"));
M2.add (New MenuItem ("Copy"));
M2.add (New MenuItem ("paste"));
var m3 = new Menu ("View");
var M33 = new MenuItem ("View List");
M33.add (New MenuItem ("Function List");
M3.add (M33);
M3.add (New MenuItem ("Tool Bar"));
Root.add (m3);
Root.tostring ();
}