Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 大写“;a「';它在流星模板中_Meteor - Fatal编程技术网

Meteor 大写“;a「';它在流星模板中

Meteor 大写“;a「';它在流星模板中,meteor,Meteor,渲染后如何在Meteor模板中使用大写的小a 我尝试的是: Meteor的LiveRange对象有一个visit()方法。使用它,我可以访问模板的所有渲染DOM节点。对于每个DOM文本节点,我在访问者中修改其数据 然而!如何获取模板的LiveRange对象 在模板的回调rendered()中,这是模板实例。它在名为\u spark\u keezuqtoktobuqw3xw之类的成员中有一个LiveRange对象。看起来Meteor不喜欢有人访问此成员 我如何才能以一种让流星神满意的方式获得模板的

渲染后如何在Meteor模板中使用大写的小a

我尝试的是:

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文本节点和一些属性节点中。类似于引用的技巧应该有助于处理这些属性节点。