Vì bạn chỉ nói render, vâng, bạn có thể. Bạn có thể làm một cái gì đó dọc theo dòng này:
function render(){
var inp = document.getElementById("box");
var data = `
<svg xmlns="http://www.w3.org/2000/svg" width="${inp.offsetWidth}" height="${inp.offsetHeight}">
<foreignObject width="100%" height="100%">
<div xmlns="http://www.w3.org/1999/xhtml"
style="font-family:monospace;font-style: normal; font-variant: normal; font-size:13.3px;padding:2px;;">
${inp.value} <i style="color:red">cant touch this</i>
</div>
</foreignObject>
</svg>`;
var blob = new Blob( [data], {type:'image/svg+xml'} );
var url=URL.createObjectURL(blob);
inp.style.backgroundImage="url("+URL.createObjectURL(blob)+")";
}
onload=function(){
render();
ro = new ResizeObserver(render);
ro.observe(document.getElementById("box"));
}
#box{
color:transparent;
caret-color: black;
font-style: normal;/*must be same as in the svg for caret to align*/
font-variant: normal;
font-size:13.3px;
padding:2px;
font-family:monospace;
}
<textarea id="box" oninput="render()">you can edit me!</textarea>
Điều này làm cho nó
textarea
sẽ hiển thị html! Bên cạnh việc nhấp nháy khi thay đổi kích thước, không thể sử dụng trực tiếp các lớp và phải đảm bảo rằng div trong
svg
định dạng có cùng định dạng
textarea
với dấu mũ để căn chỉnh chính xác, nó hoạt động!