2012-03-14 121 views
0

我有一个场景,我在页面中有一个占位符文本,我将在页面完全加载后替换。 我的问题是,我需要更换文字的ReCaptcha图像的插件,例如:用html元素替换html的占位符文本使用javascript

我有文字loading...将被替换为:

<recaptcha:recaptchacontrol ID='recaptcha' runat='server' PublicKey='kfldsjfh4378qyf43h4eidfhew' PrivateKey='sdflkdsfy908s6dfdsfkj' Theme='clean' /> 

我找不到这样做的方式,任何帮助将不胜感激。

+0

顺便说一句,为什么你告诉每个人你的*私人*键? – nonchip 2012-03-14 15:32:55

+0

这不是我的私钥,我替换为虚拟文本(实际上都是键):) – 2012-03-14 15:34:11

回答

1

发现,在聊天的答案:

<recaptcha:...>标签是由一些服务器端插件解析,他们不是在客户端JS写他们之后呈现。所以取代工作正常,但插件没有...

0

你可以document.body.innerHtml做任何字符串操作(如搜索和替换):

document.body.innerHtml = document.body.innerHtml.replace(/Loading\.\.\./g, 
                  "<recaptcha...>"); 
+0

我正在尝试此操作,但没有工作: document.body.innerHTML = document.body.innerHTML.replace(“123”,“ recaptcha:recaptchacontrol ID ='recaptcha'runat ='server'PublicKey ='kfldsjfh4378qyf43h4eidfhew'PrivateKey ='sdflkdsfy908s6dfdsfkj'Theme ='clean'/>“); – 2012-03-14 15:33:05

+0

我想你需要使用REGEX,所以试着'/ 123/g'而不是''123“' – nonchip 2012-03-14 15:37:36

+0

奇怪:我尝试了一个简单的例子,用一个只包含”123“的”html页面“,然后运行:' document.body.innerHTML = document.body.innerHTML.replace(“123”,“456”);',它产生了“456”。 – nonchip 2012-03-14 15:40:00

0

包装你 “正在加载...” 文本在<span>有唯一的ID,如

<span id="removeme">Loading...</span> 

然后,如果您不想使用该复杂名称空间标签做很多DOM-fu,则可以执行以下操作:

var removeme = document.getElementById('removeme'); 
removeme.innerHTML = "<recaptcha:recaptchacontrol ..."; 
var recaptchaThing = removeme.firstChild; 
removeme.removeChild(recaptchaThing); 
var parent = removeme.parentNode; 
parent.insertBefore(recaptchaThing, removeme); 
parent.removeChild(removeme); 

在让浏览器找出如何构建该怪异元素的DOM之后,这将用<recaptcha:recaptchacontrol>元素代替<span>。如果事实证明<recaptcha:recaptchacontrol>不能放置在<span>元素的内部,请改为<div style="display:inline">

+0

它不能从javascript完成,因为 2012-03-14 16:01:42

+0

哦,我没有注意到这一点。我想你有一个ASP.NET后端,这个控件是一个自定义的服务器标签(不像Facebook使用的自定义客户端标签;我不熟悉ReCaptcha插入过程)。 – 2012-03-14 16:14:24