【发布时间】:2011-09-29 08:44:12
【问题描述】:
希望这个不要太棘手......
我正在尝试使用 javascript(使用 jQuery 插件)获取 <!-- itemtemplate --> cmets 之间的上下文。结果必须排除 cmets。在这种情况下,父级是一个表,但它可以是任何诸如 div 之类的东西
表格
<table id="lvList" class="grid1">
<tr>
<th>Name </th>
<th>Number </th>
<th>Type </th>
<th>Account Manager </th>
</tr>
<!-- itemtemplate -->
<tr>
<td><boundfield output="hyperlink" datafield="name" dataurlfields="id" dataurlformat="details/?id={0}" /></td>
<td><boundfield output="string" datafield="id" /></td>
<td><boundfield output="string" datafield="type" /></td>
<td><boundfield output="string" datafield="accmgr" /></td>
</tr>
<!-- itemtemplate -->
</table>
分区
<div id="lvList">
<!-- itemtemplate -->
something something something
<boundfield output="string" datafield="id" />
<!-- itemtemplate -->
</div>
感谢 Felix 的创意
function GetTemplate(root, name) {
var output = "";
var record = false;
function iterate(node) {
var children = node.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child.nodeType === 3 && child.nodeValue.trim() === "") continue;
if (child.nodeType === 8 && child.nodeValue.trim() === name) {
if (!record) { record = true; continue; }
else { break; }
}
if (record)
output += outerHTML(child);
else {
if (child.hasChildNodes)
iterate(child);
}
}
}
iterate(root);
return output;
};
function ClearTemplate (root, name) {
var record = false;
function iterate(node) {
var children = node.childNodes;
for (var i = children.length - 1; i >= 0; i--) {
var child = children[i];
if (child.nodeType === 8 && child.nodeValue.trim() === name) {
if (!record) { record = true; continue; }
else { break; }
}
if (record)
node.removeChild(child);
else {
if (child.hasChildNodes)
iterate(child);
}
}
}
iterate(root);
};
function InsertInto (root, name, items) {
function iterate(node) {
var children = node.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child.nodeType === 3 && child.nodeValue.trim() === "") continue;
if (child.nodeType === 8 && child.nodeValue.trim() === name) {
for (var n = items.length - 1; n >= 0; n--)
child.parentNode.insertBefore(items[n], child.nextSibling);
break;
}
if (child.hasChildNodes)
iterate(child);
}
}
iterate(root);
};
String.prototype.trim = function () {
return this.replace(/^(\s| |\u00A0)+|(\s| |\u00A0)+$/g, "");
};
function outerHTML(node) {
return node.outerHTML ||
(function (n) {
var div = document.createElement('div');
div.appendChild(n.cloneNode(true));
return div.innerHTML;
})(node);
};
【问题讨论】:
-
为什么不用
jQuery.tmpl()插件? -
您是否总是想要获得第二个 TR?
-
这看起来像是一种糟糕的自制模板语言。如果可以的话,你应该使用 jQuery 模板或类似的东西。
-
@Robert 现在会调查 tmpl 但不,不总是第二个 tr
-
你如何得到这个内容:它是一个DOM元素或字符串或xmlhttprequest的响应?
标签: javascript jquery regex