Javascript 动态更改innerText';s在没有eval()的情况下启动
我有一些代码(几个批次)如下所示:Javascript 动态更改innerText';s在没有eval()的情况下启动,javascript,html,Javascript,Html,我有一些代码(几个批次)如下所示: 1 <div id="backgrounds" class="centery">Backgrounds 2 <div id="bk1" class="attr">Background 1 3 <div class="container"> 4 <!-- Lots more HTML here /--> 5 </di
1 <div id="backgrounds" class="centery">Backgrounds
2 <div id="bk1" class="attr">Background 1
3 <div class="container">
4 <!-- Lots more HTML here /-->
5 </div>
6 </div>
7 </div>
eval(changeFirstCharacters('bk1', "'" + document.getElementById('background1').value + "'"));
但因为我希望它只在事件侦听器触发时执行,所以它只输出代码,而不是对代码进行求值。因此,my event listener包含以下行:
1 <div id="backgrounds" class="centery">Backgrounds
2 <div id="bk1" class="attr">Background 1
3 <div class="container">
4 <!-- Lots more HTML here /-->
5 </div>
6 </div>
7 </div>
eval(changeFirstCharacters('bk1', "'" + document.getElementById('background1').value + "'"));
其中background1
是一个选择框
如何重新编写changeFirstCharacters
以不需要求值,但仅在调用时仍能工作
changeFirstCharacters()代码
我看不出那句话有什么动态。我们需要
eval
的唯一原因是动态生成代码,但newText
和id
都不会更改生成的代码。因此,应采取以下措施:
document.getElementById(id).innerHTML = newText +
document.getElementById(id).innerHTML.substr(document.getElementById(id).innerText.length,
document.getElementById(id).innerHTML.length - document.getElementById(id).innerText.length);
调用人(不在第二个参数周围添加引号):
另外,第一个代码调用了
getElementById(id)
五次,这不仅是性能上的损失,而且相当难看。您可能希望将其改写为:
var el = document.getElementById(id);
el.innerHTML = newText + el.innerHTML.substr(el.innerText.length,
el.innerHTML.length - el.innerText.length);
我看不出这里有什么问题?而且我在这里也看不到eval的任何用途。在“像这样的一行:”和“where
background1
是一个选择框”之间。这行代码以eval(
var el = document.getElementById(id);
el.innerHTML = newText + el.innerHTML.substr(el.innerText.length,
el.innerHTML.length - el.innerText.length);