继续操练,本文使用了Cross Browser的Event处理机制,另外也使用了NodeIterator功能:
index.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Click And Remove</title> <script type="text/javascript" src="js/EventUtil.js"></script> <script type="text/javascript" src="js/MouseEventUtil.js"></script> <script type="text/javascript" src="js/LoadUtil.js"></script> <style type="text/css"> #layout { background-color:#cccccc; border:2px solid #333333; width:800px; height:400px; margin:0px auto; } </style> </head> <body> <div id="layout"> <p>Cloud computing is a colloquial expression used to describe a variety of different types of</p> <p>computing concepts that involve a large number of computers connected through a real-time </p> <p>communication network (typically the Internet).[1] Cloud computing is a jargon term without </p> <p>a commonly accepted non-ambiguous scientific or technical definition. In science, cloud computing</p> <p>is a synonym for distributed computing over a network and means the ability to run a program on </p> <p>many connected computers at the same time. The phrase is also, more commonly used to refer to </p> <p>network based services which appear to be provided by real server hardware, which in fact are </p> <p>served up by virtual hardware, simulated by software running on one or more real machines. Such</p> <p> virtual servers do not physically exist and can therefore be moved around and scaled up (or down)</p> <p>on the fly without affecting the end user - arguably, rather like a cloud.</p> </div> </body> </html>
var EventUtil = { addHandler: function(element, type, handler) { if(element.addEventListener) { element.addEventListener(type, handler, false); } else if(element.attachEvent) { element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; } }, removeHandler: function(element, type, handler) { if(element.removeEventListener) { element.removeEventListener(type, handler, false); } else if(element.detachEvent) { element.detachEvent("on" + type, handler); } else { element["on" + type] = null; } }, getEvent: function(event) { return event ? event : window.event; }, getTarget: function(event) { return event.target ? event.target : event.srcTarget; } };
var MouseEventUtil = { removeSelf: function(event) { event = EventUtil.getEvent(event); var target = EventUtil.getTarget(event); if(target.tagName.toLowerCase() != "p") { return; } var parent = target.parentNode; var len = parent.childNodes.length; for(var i = 0; i < len; i++) { if(parent.childNodes[i] == target) { break; } } parent.removeChild(parent.childNodes[i]); }, };
var LoadUtil = { filter: function(node) { return node.tagName.toLowerCase() == "p" ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; }, loadEventHandler: function() { var layout = document.getElementById("layout"); var iterator = document.createNodeIterator(layout, NodeFilter.SHOW_ELEMENT, LoadUtil.filter, false); var node = iterator.nextNode(); while(node != null) { EventUtil.addHandler(node, "click", MouseEventUtil.removeSelf); node = iterator.nextNode(); } }, }; EventUtil.addHandler(window, "load", LoadUtil.loadEventHandler);