Skip to content

Instantly share code, notes, and snippets.

@zcorpan
Created August 17, 2016 11:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zcorpan/02a63dad75e36b0ed6a3dbf5a367af6b to your computer and use it in GitHub Desktop.
Save zcorpan/02a63dad75e36b0ed6a3dbf5a367af6b to your computer and use it in GitHub Desktop.
innerText setter
<!doctype html>
<script>
function collect(re, pointer, input) {
var collected = "";
while (input[pointer] !== undefined && re.test(input[pointer])) {
collected += input[pointer];
pointer++;
}
return [collected, pointer];
}
function setInnerText(input) {
var pointer = 0;
var frag = new DocumentFragment();
var text = '';
while (input[pointer] !== undefined) {
[text, pointer] = collect(/[^\r\n]/, pointer, input);
if (text !== '') {
frag.appendChild(document.createTextNode(text));
}
// newlines
while (input[pointer] !== undefined && (input[pointer] === '\r' || input[pointer] === '\n')) {
if (input[pointer] === '\r' && input[pointer + 1] === '\n') {
pointer++;
}
pointer++;
frag.appendChild(document.createElement('br'));
}
}
console.log(input, frag);
}
var inputs = ['\nhello\r\r\n\nkitty'];
inputs.forEach(setInnerText);
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment