vla*_*lad 12 html javascript function innerhtml charat
我有一个函数,用几行基本的JavaScript代码模拟输入,但是它附加了文本,但是我想在任何其他已经存在的文本/元素之前将文本添加到元素之前而不更改html结构.
如何通过最简单的JavaScript实现这一目标?
JavaScript的
var el = getElementById('one'), str = 'Abcdefg...'
function type(){
el.innerHTML += str.charAt(i); i++;
if(i < str.length){var t = setTimeout(type, 30);}
};type();
Run Code Online (Sandbox Code Playgroud)
HTML
<span id="one">...<span id="endingEl"></span></span>
Run Code Online (Sandbox Code Playgroud)
coo*_*ter 20
用.insertAdjacentHTML而不是.innerHTML.
el.insertAdjacentHTML("afterbegin", str.charAt(i));
Run Code Online (Sandbox Code Playgroud)
可用的四个职位是:
"beforebegin" (直接在当前节点之前)
"afterbegin" (在当前节点内,开头)
"beforeend" (在当前节点内,最后)
"afterend" (直接在当前节点之后)
避免.innerHTML += "..."不惜一切代价使用各种解决方案.这是一种非常具有破坏性和昂贵的方法.
cookie Monster 解决了这个问题(两年多前),但我只是想分享一个有用的链接,我发现了另一个例子和一个很好的可视化。 https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML
编辑:如果该链接变得无用,以下是我发现有用的 MDN 相关信息:
概括
insertAdjacentHTML() 将指定的文本解析为 HTML 或 XML,并将结果节点插入到 DOM 树中的指定位置。它不会重新解析正在使用的元素,因此不会破坏元素内的现有元素。这样,并且避免了额外的序列化步骤,使其比直接的innerHTML操作要快得多。
句法
element.insertAdjacentHTML(position, text);
Run Code Online (Sandbox Code Playgroud)
position是相对于元素的位置,并且必须是以下字符串之一:
'beforebegin' 在元素本身之前。
'afterbegin' 就在元素内部,在其第一个子元素之前。
'beforeend' 就在元素内部,在其最后一个子元素之后。
'afterend' 在元素本身之后。
text是要解析为 HTML 或 XML 并插入到树中的字符串。
职位名称可视化
<!-- beforebegin -->
<p>
<!-- afterbegin -->
foo
<!-- beforeend -->
</p>
<!-- afterend -->
Run Code Online (Sandbox Code Playgroud)
注意:仅当节点位于树中并且具有元素父级时, 和 位置才起作用
beforebegin。afterend
例子
// <div id="one">one</div>
var d1 = document.getElementById('one');
d1.insertAdjacentHTML('afterend', '<div id="two">two</div>');
// At this point, the new structure is:
// <div id="one">one</div><div id="two">two</div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5798 次 |
| 最近记录: |