日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Javascript元编程创建DOM节点

發布時間:2025/5/22 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Javascript元编程创建DOM节点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在使用javascript創建DOM節點的過程中,難免要使用document.createElement、setAttribute、 document.createTextNode等冗長、還有瀏覽器兼容性問題的節點操作方法,雖然有人提議使用字符串拼接后,再使 用.innerHTML=可以降低創建節點的成本,而且還有更好的性能,但在我印象中innerHTML并不能適應所有需求(具體神馬需求我也忘了),所 以下面給大家介紹一種使用javascript元編程技巧來動態創建節點的方法。
那么什么是元編程呢?了解Ruby的同學知道,Ruby的風靡離不開Ruby on Rails(RoR)框架的推動。RoR框架通過魔幻實現質樸的方式,把很多需要用其他語言實現的功能用Ruby來實現,最經典當屬RoR框架的 ActiveRecord。讓我們看一下下面這段代碼:

person = Person.find_by_email('xxx@x1989.com')
person.age = 23
person.save
上述代碼可以用SQL語句替換,如下所示:

SELECT * FROM person WHERE email = 'xxx@x1989.com'
UPDATE person SET age = 23 WHERE email = 'xxx@x1989.com'
即使不會Ruby和SQL的人也可以看出,采用Ruby語法方式更自然。而正是Rails通過元編程技巧,讓我們無須在一個程序中混用兩種不同的語言。元編程的定義:
<blockquote>元編程是指某類計算機程序的編寫,這類計算機程序編寫或者操縱其它程序(或者自身)作為它們的數據,或者在運行時完成部分本應在編譯時完成的工作。</blockquote>
那么,我希望用javascript實現"create_"+任意HTML5標簽名的動態節點生成函數,比如用create_form、create_div、create_input來生成對應名稱的節點,使用下面的api:

//①創建只含有文本的節點
//<span>hello world</span>
var span = create_span('hello world');
//<br />
var br = create_br();

//②可以在參數1中以對象字面量來定義屬性
//<input type="text" size="20" value="123" />
var input = create_input({
??? 'type': 'text',
??? 'size': 20,
??? 'value': '123'
})
//③用參數2定義文本節點
//<a href="http://www.google.com.hk" title="谷歌搜索" target="_blank" rel="xxxxx" costom_attr="自定義屬性">搜索</a>
var a = create_a({
??? 'href': 'http://www.google.com.hk',
??? 'title': '谷歌搜索',
??? 'target': '_blank',
??? 'rel': 'xxxxx',
??? 'costom_attr': '自定義屬性',
}, '搜索');

//④參數2可以是節點 參數3(可選)是文本節點
//<div><img src="http://www.google.com.hk/intl/zh-CN/images/logo_cn.png">這是logo</div>
var div = create_div({}, create_img({'src': 'http://www.google.com.hk/intl/zh-CN/images/logo_cn.png'}), '這是logo')

//⑤參數2也可以是節點構成的數組
//<ul class="list1"><li>項目1</li><li>項目2</li><li>項目3</li></ul>
var ul = create_ul({
??? 'class': 'list1'
}, [create_li('項目1'), create_li('項目2'), create_li('項目3')]);
實現方式:

void function() {
??? //支持以"create_"+任意HTML5標簽名的動態節點生成函數
??? var doc = document, win = window,
??? //HTML5標簽:
??? tags = ["a", "abbr", "acronym", "address", "applet", "area", "article", "aside", "audio", "b", "base", "basefont", "bdo", "big", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "command", "datagrid", "datalist", "datatemplate", "dd", "del", "details", "dialog", "dir", "div", "dfn", "dl", "dt", "em", "embed", "event-source", "fieldset", "figure", "font", "footer", "form", "frame", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hr", "html", "i", "iframe", "img", "input", "ins", "isindex", "kbd", "label", "legend", "li", "link", "m", "map", "menu", "meta", "meter", "nav", "nest", "noframes", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "pre", "progress", "q", "rule", "s", "samp", "script", "section", "select", "small", "source", "span", "strike", "strong", "style", "sub", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "tt", "u", "ul", "var", "video", "xmp"];
??? for (var i = 0; tags[i]; i++) {
??????? //閉包是個好東東
??????? win['create_' + tags[i]] = function(tag) {
??????????? return function(attrs, childNode, textNode) {
??????????????? return createNode(tag, attrs, childNode, textNode)
??????????? }
??????? } (tags[i]);女裝品牌排行榜
??? }
??? var createNode = function (tagName, attrs, childNode, textNode) {
??????? //創建以tagName命名的節點
??????? var node = doc.createElement(tagName);

??????? //處理attrs參數 設置節點屬性
??????? typeof attrs === 'string' ? createTextNode(node, attrs) : createAttributeNode(node, attrs); //創建并設置屬性節點
??????? //處理childNode參數 添加子節點
??????? if (typeof childNode === 'string') {
??????????? createTextNode(node, childNode);
??????? } else if (childNode && childNode.nodeName) {
??????????? node.appendChild(childNode)
??????? } else if (childNode instanceof Array) {
??????????? for (var i = 0; childNode[i]; i++) {
??????????????? node.appendChild(childNode[i])
??????????? }
??????? }

??????? //處理文本節點
??????? if (textNode && typeof textNode === 'string') {
??????????? createTextNode(node, textNode);
??????? }
??????? return node;
??? }
??? var createAttributeNode = function(node, attrs) {
??????? for (var i in attrs) {貨運專家
??????????? //下面這種方式適用于原生的節點屬性
??????????? //node[i] = attrs[i];
??????????? //在IE下setAttribute設置某些原生屬性會有兼容性問題
??????????? //node.setAttribute(i, attrs[i]);
??????????? //document.createAttribute在IE下設置原生屬性會不帶引號
??????????? var a = doc.createAttribute(i);
??????????? a.value = attrs[i];
??????????? node.setAttributeNode(a);
??????? }
??? }
??? var createTextNode = function (node, text) {
??????? node.appendChild(doc.createTextNode(text))
??? }
} ();

轉載于:https://www.cnblogs.com/sky7034/archive/2011/07/19/2110344.html

總結

以上是生活随笔為你收集整理的Javascript元编程创建DOM节点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩在线一 | 日本成人在线不卡 | 君岛美绪在线 | 亚洲欧美综合视频 | 国产中年熟女高潮大集合 | 狠狠插狠狠干 | 国产色无码精品视频国产 | 欧美91精品| 黄色国产视频网站 | av一卡| 亚洲成人一区 | 日韩欧美国产综合 | 日本一道本在线 | 国产欧美久久久精品免费 | 欧美性猛交aaaa片黑人 | 日本久久网 | 91高潮大合集爽到抽搐 | 国产精品久久久久久久久久久久久 | 男女无遮挡xx00动态图120秒 | 热逼视频 | 色黄视频| 中文字幕在线观看国产 | 麻豆视频网页 | jizz美女 | 三级免费黄录像 | 亚洲精品一区二区三 | 国产ts变态重口人妖hd | 秋霞欧洲 | 国产精品中文久久久久久 | 青青草视频污 | 超碰在线观看91 | 欧美多人猛交狂配 | 99久久精品国产一区色 | 欧美丰满熟妇bbb久久久 | 成人动漫在线免费观看 | 亚洲乱码久久 | 国产精品aaaa | 不卡久久| www中文字幕在线观看 | av手机天堂| 日韩在线观看视频一区二区 | 超碰国产97 | 亚洲天堂麻豆 | 宅男午夜在线 | 黄色高清视频 | 久久精品久久久久 | 狠狠热免费视频 | 日本三级在线 | 亚洲黄色在线网站 | 国产一级精品视频 | 亚洲精品在线观看av | 4438亚洲| 悠悠色影院 | 一本av在线 | 少妇激情四射 | 色婷婷激情 | 在线看片资源 | 日本久久精品视频 | 亚洲人成电影在线 | 日本少妇吞精囗交视频 | 特黄老太婆aa毛毛片 | 噜噜噜精品欧美成人 | 欧美久久99 | 尤物视频官网 | 免费看欧美一级特黄a大片 国产免费的av | 亚洲中文字幕97久久精品少妇 | 国产色播av在线 | 美女黄色一级 | 国产一级理论片 | 午夜视频网址 | 久久精品中文闷骚内射 | 黄色三级在线 | 日韩色图视频 | 综综综综合网 | 麻豆视频二区 | 男人添女人下部高潮视频 | 亚洲电影在线看 | 国产乱人伦app精品久久 | 激情综合六月 | eeuss国产一区二区三区 | 亚洲美女免费视频 | 91视频成人 | 天天干天天上 | 黑人精品一区二区 | 操女人免费视频 | 日日摸日日碰夜夜爽av | 日日艹 | 日韩午夜激情视频 | 日本一二区视频 | 春宵av| 国产在线不卡一区 | 欧美精品久久久久久久 | 污片在线看 | 亚洲成人av综合 | 国产日韩视频在线观看 | 99成人在线观看 | 国产黄色免费 | 拍国产真实乱人偷精品 | 欧美日韩在线视频一区二区三区 |