2013-04-08 110 views
-1

控制台给我一个错误,而试图更改JavaScript模板表达的textnode的文本值即${foo}

的js

  // this.textContent here gives ${languageLabel} 
      var variable = UI.patternMatch(textNodes_elRef); 
      $(variable).nodeValue ="language"; 
     }); 


patternMatch : function(textNode) { 
    var templateRegex = /\${([\S\s]*?)\}/g; 
    return $(textNode).contents().filter(function() { 
     if($(this.textContent).match(templateRegex)){ 
      // ** How do i return the textnode with only matched pattern** 
     } 

所以总结基本上我想改变$ {languagelabel}的textnode的textValue为语言,但我得到的错误为**语法错误,无法识别的表达式:$ {languageLabel} **

+0

'UI.patternMatch(this.textContent)'返回什么? – Ian 2013-04-08 00:43:08

+0

我猜'$ {languageLabel}'被传递给'$()',因为当我调用'$(“$ {languageLabel}”)''时我得到了同样的错误。 – Ian 2013-04-08 00:45:41

+0

另外,'.textValue'不是一个jQuery方法。您可能正在寻找'.text()'。 – Ian 2013-04-08 00:49:05

回答

1

您可以只需存储对循环后匹配并返回的textNode实例的引用,并且不必仅使用jQuery来修改textNode的nodeValue属性。以下是一个示例http://jsfiddle.net/LAud7/

function patternMatch(el) { 
    var templateRegex = /\${([\S\s]*?)\}/g, 
     nodeFound; 

    $(el).contents().each(function() { 
     if (templateRegex.test(this.nodeValue)) { 
      nodeFound = this; 
      return false; 
     } 
    }); 

    return nodeFound; 
} 

patternMatch($('#test')).nodeValue = 'replaced content'; 

请注意,使用这种方法,如果包含textNode${...}包含其它文字以及,它不会产生预期的结果,因为所有的文字将被替换,所以你需要确保的是,${...}包含在它自己的textNode中。

+0

我仍然发现相同的错误..我通过textnode文本内容,也尝试传递元素本身,但它给了我一个错误 – inputError 2013-04-08 13:08:12

+0

什么'alert(typeof patternMatch(...));'return? – plalx 2013-04-08 13:29:55

+0

我终于明白了..谢谢你的建议..它的工作..我通过模式匹配的节点,并通过每个节点循环,并获得对匹配节点的引用,并返回它,并做了一些改变,它的工作..谢谢这么多+1 – inputError 2013-04-08 13:39:31

相关问题