Meteor 大写“;a「';它在流星模板中
渲染后如何在Meteor模板中使用大写的小a 我尝试的是: Meteor的Meteor 大写“;a「';它在流星模板中,meteor,Meteor,渲染后如何在Meteor模板中使用大写的小a 我尝试的是: Meteor的LiveRange对象有一个visit()方法。使用它,我可以访问模板的所有渲染DOM节点。对于每个DOM文本节点,我在访问者中修改其数据 然而!如何获取模板的LiveRange对象 在模板的回调rendered()中,这是模板实例。它在名为\u spark\u keezuqtoktobuqw3xw之类的成员中有一个LiveRange对象。看起来Meteor不喜欢有人访问此成员 我如何才能以一种让流星神满意的方式获得模板的
LiveRange
对象有一个visit()
方法。使用它,我可以访问模板的所有渲染DOM节点。对于每个DOM文本节点,我在访问者中修改其数据
然而!如何获取模板的LiveRange
对象
在模板的回调rendered()
中,这是模板实例。它在名为\u spark\u keezuqtoktobuqw3xw
之类的成员中有一个LiveRange
对象。看起来Meteor不喜欢有人访问此成员
我如何才能以一种让流星神满意的方式获得模板的LiveRange
对象
在你问我为什么要做一件愚蠢的事,比如大写字母“a”之前:这很复杂。实际上,我希望在模板中的所有DOM文本节点上执行搜索和替换,因为我试图将横切关注点应用于Meteor应用程序中的多个模板。您对a在模板中的位置有任何限制吗 例如,这是如何在模板的所有跨距内将所有a大写:
Template.complicated.rendered = function() {
this.findAll('span').each(function(idx, element) {
$(element).html( $(element).html().replace(/a/g, 'A');
});
};
Template.complicated.rendered = function() {
var node = this.firstNode;
while(true) {
_.each(getTextNodesIn(node, false), function(textNode) {
textNode.nodeValue = textNode.nodeValue.replace(/a/g, 'A');
});
if(node === template.lastNode) return;
node = node.nextSibling;
}
}
如果要遍历所有顶级节点,可以这样做:
Template.complicated.rendered = function() {
var node = this.firstNode;
while(true) {
// manipulate with node
//
// for example, get all text nodes within in
// and replace a's with A's
if(node === template.lastNode) return;
node = node.nextSibling;
}
}
但是,您需要小心使用此方法,并且只替换叶节点的内容。如果您更改每个a
存在的链接,您可能会更改不想更改的链接URL。此外,更改所有DOM,而不仅仅是文本节点内容,可能会激怒流星神
编辑:结合,此代码将升级模板中所有文本节点中的所有a:
Template.complicated.rendered = function() {
this.findAll('span').each(function(idx, element) {
$(element).html( $(element).html().replace(/a/g, 'A');
});
};
Template.complicated.rendered = function() {
var node = this.firstNode;
while(true) {
_.each(getTextNodesIn(node, false), function(textNode) {
textNode.nodeValue = textNode.nodeValue.replace(/a/g, 'A');
});
if(node === template.lastNode) return;
node = node.nextSibling;
}
}
关于a的发生的好问题。它们出现在所有DOM文本节点和一些属性节点中。类似于引用的技巧应该有助于处理这些属性节点。