好像我们用它contenteditable="true"
创建一个div元素,然后如果在控制台中看到它,那么
第一。在控制台中有一个简单的div标签。
<div id="typbody" contenteditable="true" style="width:100%; height:200px; border:1px solid #ccc; "></div>
第二。如果我在div标签中输入,那么在控制台中会写入<div><br></div>
!
如果我写了任何东西,它也写在<div>
内。
所以我的问题是:
1)有没有办法为这些新创建的div
标记提供ID?
2)是否还有办法为所有新的div
提供不同的ID或类?
我是否必须学习除javascript
或php
以外的任何其他语言?
答案 0 :(得分:1)
div
代码添加ID?” 看看MutationObserver MDN, 和DOM MutationObserver – reacting to DOM changes without killing browser performance.
(function () {
"use strict";
var target = document.getElementById("typbody"),
config = {
childList: true,
},
eCollection = [],
i = 0,
id = target.id + "_",
observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.addedNodes) {
[].forEach.call(mutation.addedNodes, function (node) {
if (node.nodeName.toLowerCase() === "div") {
var index = eCollection.indexOf(node.nextSibling);
node.id = id + i++;
eCollection.push(node);
if (node.nextSibling && index > -1) {
node.id = node.nextSibling.id;
for (var j = index; j < eCollection.length - 1; j++) {
eCollection[j].id = id + (+eCollection[j].id.substr(id.length) + 1);
}
}
eCollection.sort(sortC);
}
});
}
if (mutation.removedNodes) {
[].forEach.call(mutation.removedNodes, function (node) {
if (node.nodeName.toLowerCase() === "div") {
var index = eCollection.indexOf(node);
eCollection.splice(index, 1);
for (var j = index; j < eCollection.length; j++) {
eCollection[j].id = id + (eCollection[j].id.substr(id.length) - 1);
}
i--;
eCollection.sort(sortC);
}
});
}
});
});
observer.observe(target, config);
function sortC(a, b) {
return a.id.substr(id.length) - b.id.substr(id.length);
}
}());
但为什么你想要这样的行为呢? 如果你想为这些元素添加一些样式,为什么不简单地使用css:
#typbody > div:nth-child(odd) {
color: green;
}
#typbody > div:nth-child(even) {
color: blue;
}
答案 1 :(得分:0)
创建时添加ID。如果您希望它是动态的,只需将id变量设置为动态。
var frag = document.createDocumentFragment(),
var item = document.createElement('div');
item.id = whatever;
frag.appendChild(item);
然后将frag插入到您想要的DOM中。例如,在元素'foo'之后:
foo.parentNode.insertBefore(frag, foo.nextSibling);