通过ajax创建的html调用时,替换innerHTML不工作的方法
javascript replace method not working with innerHTML when called through ajax-created html
我现在已经花了好几天的时间来调试javascript中的一个简单的替换,这快把我逼疯了。非常感谢任何帮助。
当我创建一个简单的html文件,在标题中有一个javascript函数,并在正文中调用函数时,我可以获取元素的内容,并使用replace方法替换innerHTML中的某些字符,如换行符。我也可以使用jsfiddle。
toedit = toedit.replace(/'n/g, '<br />');
然而,在实际的应用程序中,我想使用它,其中的脚本是在页面的标题和html通过一些ajax放置在页面上的一个div,它失败了。有人能发现问题吗?
以下作品在HTML页面或JSFiddle
<html>
<head>
<script type="text/javascript">
function editText(editThis)
{
alert(editThis);
//alert("hi");
var toedit = document.getElementById(editThis).innerHTML;
// alert(toedit);
toedit = toedit.replace(/'n/g, '<br />');
alert(toedit);
}
</script>
</head>
<body>
<textarea id="text" name="text" rows=9 cols=30 placeholder="Type Notes">A whole bunch
of text with
line breaks goes here</textarea><a href="#" onclick="editText('text');return false;">edit</a>
</body>
</html>
下面的脚本不能运行在id后面有*的行。删除这一行后仍然有效。当一行被注释掉时,脚本中断。
页眉:
<script type="text/javascript">
function editText(editThis)
{
alert(editThis);
//alert("hi");
var toedit = document.getElementById(editThis).innerHTML;
alert(toedit);
toedit = toedit.replace(/'n/g, '<br />'); //****problem line
alert(toedit);
}
</script>
//下面的函数从page调用,用包含上面链接的HTML填充divjs
function loadSteps(id)
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("stepsDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getsteps.php?id="+id,true);
xmlhttp.send();
} //end function
getsteps.php从上面的js函数调用
echo '<textarea id="text" rows=9 cols=30 placeholder="Type text">'.$text.'</textarea><a href="#" onclick="editText(''text'');return false">edit</a>
你设置的变量是innerHTML的副本,你需要直接更新innerHTML
document.getElementById(editThis).innerHTML=toedit;//once you've done your replace
但是为什么要在onreadystatechange中设置innerHTML呢?替换(/'n/g, '
')
一旦进入HTML,它可能不会保留换行符。
.responseText.replace(/'n/g, '<br />')
或
.responseText.replace(/'r'n/g, '<br />')
你的问题在下面一行:
var toedit = document.getElementById(editThis).innerHTML;
您正在抓取DOM对象的innerHTML,即id为"text"的文本区域。该对象的innerHTML没有更新。您需要的是文本区域的值,它将为您提供在文本区域中键入的实际文本。将上面提到的行修改为:
var toedit = document.getElementById(editThis).value;
那应该能解决你的问题!编码快乐!
相关文章:
- 如何用外部(但本地)文件替换innerHTML
- InnerHTML 追加项而不是替换项
- 使用replace方法替换innerHTML以及在Javascript中不起作用的正则表达式
- 正在尝试用responseText替换行的innerhtml
- innerhtml.replace没有替换数组javascript中的所有单词
- 将一个元素中的innerHTML替换为另一个具有Javascript的innerHTML
- 如果字符串像“价格 0 &欧元”,请替换 innerHTML
- 将 innerhtml 替换为外部页面
- 为什么用 InnerText 替换 InnerHTML 会导致性能下降 >15 倍
- 替换 JavaScript innerHTML 中的子字符串
- 试图将 document.write 替换为 innerHTML,但它不起作用
- 在 Web 视图中设置 innerHTML 将替换整个文档,而不仅仅是元素
- innerHTML 替换整个文档
- InnerHTML追加而不是替换
- 将元素innerHTML替换为其自身的副本会更改文档高度
- Javascript为模板引擎替换了innerHTML的一部分
- 当innerhtml被替换时,Jquery Mobile按钮失去高度
- NotFoundError:替换innerHTML时DOM异常8
- 替换ie浏览器中的document.documentElement.innerHTML
- 使用javascript将所有innerHTML替换为相同的ID