用JavaScript创建DOM树的一种更简单的方法
An Easier Way to Create a DOM Tree in JavaScript?
为这个网站编写用户脚本,所以我添加元素的唯一方法就是使用JavaScript。目前,它很简单,但很多,我希望能找到一种减少代码的方法。
我有这个:
var elm = document.getElementById('main'),
nav = document.createElement('nav'),
ul = document.createElement('ul'),
l1 = document.createElement('li'),
l2 = document.createElement('li'),
l3 = document.createElement('li'),
l4 = document.createElement('li'),
l5 = document.createElement('li'),
l6 = document.createElement('li'),
l7 = document.createElement('li'),
nest2 = document.createElement('ul'),
nest3 = document.createElement('ul'),
nest4 = document.createElement('ul'),
nest2L1 = document.createElement('li'),
nest2L2 = document.createElement('li'),
nest2L3 = document.createElement('li'),
nest3L1 = document.createElement('li'),
nest3L2 = document.createElement('li'),
nest3L3 = document.createElement('li'),
nest3L4 = document.createElement('li'),
nest4L1 = document.createElement('li'),
nest4L2 = document.createElement('li');
nav.id = 'ps-nav';
ul.id = 'ps-ul';
l1.id = 'ps-announcements';
l1.className = 'ps-listItem';
l2.id = 'ps-sponge';
l2.className = 'ps-listItem';
nest2.id = 'ps-sponge-nest';
nest2.className = 'ps-nest';
l3.id = 'ps-plugins';
l3.className = 'ps-listItem';
nest3.id = 'ps-plugins-nest';
nest3.className = 'ps-nest';
l4.id = 'ps-generalDiscussion';
l4.className = 'ps-listItem';
nest4.id = 'ps-generalDiscussion';
nest4.clasName = 'ps-nest';
l5.id = 'ps-serverDiscussion';
l5.className = 'ps-listItem';
l6.id = 'ps-meta';
l6.className = 'ps-listItem';
l7.id = 'ps-uncategorized';
l7.className = 'ps-listItem';
elm.appendChild(nav);
nav.appendChild(ul);
ul.appendChild(l1);
ul.appendChild(l2);
l2.appendChild(nest2);
nest1.appendChild(nest2L1);
nest1.appendChild(nest2L2);
nest1.appendChild(nest2L3);
ul.appendChild(l3);
l3.appendChild(nest3);
nest2.appendChild(nest3L1);
nest2.appendChild(nest3L2);
nest2.appendChild(nest3L3);
nest2.appendChild(nest3L4);
ul.appendChild(l4);
l4.appendChild(nest4);
nest3.appendChild(nest4L1);
nest3.appendChild(nest4L2);
ul.appendChild(l5);
ul.appendChild(l6);
ul.appendChild(l7);
为了提高可读性,我嵌套了缩进
我如何才能减少代码量,从而达到同样的效果?
在纯javascript中:
- 创建容器
- 将其附加到页面上
- 覆盖容器的
outerHTML
。这可以通过多行字符串来完成 - 使用GM_addStyle()设置或更改CSS
像这样:
var elm = document.getElementById ('main');
var nav = document.createElement ('nav');
elm.appendChild (nav);
nav.outerHTML = multilineStr ( function () {/*!
<nav id="ps-nav">
<ul id="ps-ul">
<li id="ps-announcements" class="ps-listItem">Hiya!</li>
// ETC., ETC.
</ul>
</nav>
*/} );
//-- Reaquire `nav` variable, if desired.
nav = document.getElementById ('ps-nav');
function multilineStr (dummyFunc) {
var str = dummyFunc.toString ();
str = str.replace (/^[^'/]+'/'*!?/, '') // Strip function() { /*!
.replace (/'s*'*'/'s*'}'s*$/, '') // Strip */ }
.replace (/'/'/.+$/gm, '') // Double-slash comments wreck CSS. Strip them.
;
return str;
}
另请参阅"为什么更改我的框的innerHTML会使我的按钮在Greasemonkey中停止工作?"以及类似的问题。
jQuery的等价物是:
$("#main").append (multilineStr ( function () {/*!
<nav id="ps-nav">
<ul id="ps-ul">
<li id="ps-announcements" class="ps-listItem">Hiya!</li>
// ETC., ETC.
</ul>
</nav>
*/} ) );
//-- Reaquire `nav`, if desired.
var nav = $('#ps-nav');
function multilineStr (dummyFunc) {
var str = dummyFunc.toString ();
str = str.replace (/^[^'/]+'/'*!?/, '') // Strip function() { /*!
.replace (/'s*'*'/'s*'}'s*$/, '') // Strip */ }
.replace (/'/'/.+$/gm, '') // Double-slash comments wreck CSS. Strip them.
;
return str;
}
相关文章:
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 有没有一种方法可以仅使用HTML/CSS来隐藏基于特定值的数据单元格
- 有没有一种方法可以从URL跟踪请求的域
- 有没有一种方法可以列出Ember.Object的所有绑定
- 有没有一种方法可以获得three.js的最小/lite版本
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- 有没有一种方法可以从Javascript检测特定的应用程序是否安装在(AndroidiOS)设备上
- 在HTML/JavaScript中,有没有一种方法可以在图像开始加载时知道图像的最终布局尺寸
- 有没有一种方法可以在Javascript中进行可变递归currying
- 有没有一种方法可以检测ios<>使用jquery和触发器操作形成导航按钮
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- jQuery:使用substr()的另一种方法
- 有没有一种方法可以直接从cordova获得滚动位置
- 有没有一种方法可以通过只引用JavaScript来执行代码
- firebase中有没有一种方法可以防止快速连续写入
- GWT:有没有一种方法可以修改GWT在编译中使用的Cast.java文件
- 在Javascript(jquery)中,有没有一种方法可以检测页面锚点何时更改