1

id我正在处理的页面上的's 定义了一组以冒号分隔的字符串(例如thisPage:theForm:address1content)。我无法更改这种格式,我正在尝试对address1content.

我正在尝试将idfor传递address1content给一个函数并执行 areplaceAll并将其替换为:\\:这样我就可以执行$(id). 它不工作。

这是我所拥有的:

function validateContent(text) {

var hardCoded=$('#thisPage\\:theForm\\:address1content').val();
alert(hardCoded);

var regex = new RegExp(":", 'g');
replacedText = text.replace(regex, '\\:');  
alert(replacedText);
foundElement= $(replacedText).val();
alert(foundElement);    
}

现在该变量hardCoded正在正确通过,但我希望能够动态地执行此操作,以便我可以验证多个字段。

如果有帮助,我在小提琴中粘贴了一个简化版本:http: //jsfiddle.net/nYeJH/

4

3 回答 3

4

K,因为我的评论实际上回答了这个问题(只需阅读标题,我知道你需要所有冒号前面都有一个双反斜杠),这是我的答案:

var foundElement= $(text.replace(/:/g,'\\\\:').val();

4个反斜杠:第一个转义第二个,第三个转义第四个,冒号仍然是冒号,所以。

也就是说,一旦达到一定数量的子字符串,正则表达式就会相当慢。您应该对此进行基准测试,但使用拆分可能会稍微快一些并且(也许)更容易阅读:

var foundElement = $(text.split(':').join('\\\\:')).val();//4 slashes still
于 2012-08-17T15:15:19.287 回答
3

由于我的评论,真正的原因是#文本中被遗忘的原因。

http://jsfiddle.net/nYeJH/6

于 2012-08-17T15:12:52.427 回答
0

.replace(/:/g,"\\:")似乎工作得很好(假设你所说的硬编码是真的)。看看这个jsfiddle。

如果硬编码的实际上不起作用,并且您确实需要双重转义:,请试试这个.replace(/:/g,"\\\\:")

http://jsfiddle.net/SeNy5/

编辑:既然您有一个我们可以使用的 jsfiddle,我注意到您在 CSS 选择器的开头不小心遗漏了哈希。

于 2012-08-17T15:16:09.737 回答