рд╢реБрдн рджреЛрдкрд╣рд░
рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ, рдХрднреА-рдХрднреА рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкрд╛рда рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╡реНрдпрд╛рдХрд░рдг рдЬрд╛рдВрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╢рдмреНрджреЛрдВ / рд╡рд░реНрдЧреЛрдВ рдЖрджрд┐ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ)
рд╣рд╛рд▓рд╛рдБрдХрд┐, textarea рддрддреНрд╡ html \ bb рдЯреИрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рджрд┐рд╡реНрдп рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЯреЗрдХреНрд╕реНрдЯрд╛рд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рда рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╡рд┐рд╕реНрддреГрдд рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред
рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░
рдЪреВрдВрдХрд┐ рдЯреЗрдХреНрд╕реНрдЯрд╛рд░рд┐рдпрд╛ рдореЗрдВ рдЯреИрдЧ рд╕рдорд░реНрдерди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓рд╛ рд╡рд┐рдХрд▓реНрдк "рд▓реЗрдпрд░рд┐рдВрдЧ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
рдЬреЗрдб-рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЯреЗрдХреНрд╕реНрдЯрд░реА рдХреЗ рдкреАрдЫреЗ рдкреВрд░реНрд╡ рдмреНрд▓реЙрдХ рд░рдЦреЗрдВред
рдкреВрд░реНрд╡ рддрддреНрд╡ рдореЗрдВ, рд╣рдо textarea рдХреЗ рд╕рдорд╛рди рдПрдХ рдлрд╝реЙрдиреНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ css рдЧреБрдг рднреА рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ textarea рдмреНрд▓реЙрдХ рдХреЗ рдкрд╛рда рдХреЛ рджрд░реНрдкрдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)
рд╣рдо рдПрдХ рд╡рд░реНрдЧ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯрд░реА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЪрд┐рддреНрд░рдг:

рд╣рдо рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ
рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдХреНрд╖реНрдп рдиреЛрдб (рдЯреЗрдХреНрд╕рд╛рд░рд┐рдпрд╛) рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рдВрд╕ - рдЪрдпрди рдФрд░ рдлрд╝реЙрдиреНрдЯ рдореВрд▓реНрдп (рд╕реАрдПрд╕рдПрд╕ рдлрд╝реЙрдиреНрдЯ рдЧреБрдг) рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдирд╛
рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реА рдПрд▓реАрдореЗрдВрдЯ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ DOM рдореЙрдбрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд╕реЗ рдкреЛрдЬрд╝рд┐рд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╡реЗрдВрдЯреНрд╕ рд╣реИрдВрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рдЖрдк рд╕реАрдПрд╕рдПрд╕ рдЧреБрдгреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
/** * "" textarea * @name TextareaExtension * @param target - textarea * @param processor - * @param font - */ function TextareaExtension(target , processor, font) { var setStyleOptions = function() { // ( ), DOM, font preItem.className = "text-area-selection"; target.parentNode.appendChild(preItem); target.style.font = preItem.style.font = font || "14px Ariel"; // , , target.style.width = preItem.style.width = target.offsetWidth + "px"; target.style.height = preItem.style.height = target.offsetHeight + "px"; preItem.style.top = target.offsetTop + "px"; preItem.style.left = target.offsetLeft + "px"; target.style.background = "transparent"; target.style.overflow = "scroll"; // pre margin = 1em 0px. . //( , span pre ) preItem.style.margin = "0px 0px"; } setStyleOptions(); // if (target.addEventListener) { // textarea target.addEventListener("change", this.analyse, false); target.addEventListener("keyup", this.analyse, false); // - textarea pre target.addEventListener("scroll", this.scrollSync, false); // resize target.addEventListener("mousemove", this.resize, false); } else if (target.attachEvent) { target.attachEvent("onchange", this.analyse); target.attachEvent("onkeyup", this.analyse); target.attachEvent("onscroll", this.scrollSync); target.attachEvent("mousemove", this.resize); } }
рддреЛ, рд╡рд░реНрдЧ рд░реВрдкрд░реЗрдЦрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдХрдХреНрд╖рд╛ рдХреЗ рд╢реЗрд╖ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
this.scrollSync = function () { preItem.scrollTop = target.scrollTop; }; this.resize = function () { preItem.style.width = target.style.width; preItem.style.height = target.style.height; preItem.style.top = target.offsetTop + "px"; preItem.style.left = target.offsetLeft + "px"; }; this.analyse = function (){ var text = target.value; var words = text.split(/[\s]/); var textPosition = 0; var result = ""; for (var i in words) { if (processor(words[i])) { var textIndex; if (text.indexOf) { textIndex = text.indexOf(words[i]); } else textIndex = findText(text, words[i]); result += text.substr(0, textIndex) + "<span class='text-color-bordered text-checker'>" + words[i] + "</span>"; text = text.substr(textIndex + words[i].length, text.length); } } result += text; preItem.innerHTML = result; };
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡рд┐рдзрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдЗрд╕реЗ рдПрдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рднреЗрдЬрддреА рд╣реИред рдпрджрд┐ рд╢рдмреНрдж рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╡рд┐рдзрд┐ рдкрд┐рдЫрд▓реА рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЛ рдкреВрд░реНрд╡ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреА рд╣реИ рдФрд░ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдкреИрди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╢рдмреНрдж рдХреЛ "рд░реИрдк" рдХрд░рддреА рд╣реИ рдЬреЛ рдЪрдпрди рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдиреАрдЪреЗ рдбреЙрдЯ рдЕрдВрдбрд░рд▓рд╛рдЗрди)
IndexOf рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖ рдЦреЛрдЬ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - findText (рд╣рдо рдЗрд╕рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕реАрдзрд╛ рдкрд╛рд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ)
рд╕реАрдПрд╕рдПрд╕ рдЧреБрдг
рдпрд╣рд╛рдБ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреБрдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдо рдЙрдирдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ:
.text-area-selection { position:absolute; padding:2px; z-index:-1; display:block; word-wrap:break-word; white-space:pre-wrap; color:white; overflow:scroll; } .text-color-bordered { border-bottom:1px dotted red; }
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░реА рдПрд▓реАрдореЗрдВрдЯ рдХреЛ рдЯреЗрдХреНрд╕рд╛рд░рд┐рдпрд╛ рдХреЗ рддрд╣рдд рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░ z-index рдХреЛ -1 рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрдВрдбреЗрдВрдЯ, рд╕реНрдХреНрд░реЙрд▓ рдЬреЛрдбрд╝реЗрдВред
рдЕрдм рд╢рдмреНрдж-рдЖрд╡рд░рдг рдФрд░ рд╢реНрд╡реЗрдд-рд╕реНрдерд╛рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ, рдпреЗ рдЧреБрдг рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред
рд╡реНрд╣рд╛рдЗрдЯ-рд╕реНрдкреЗрд╕: рдкреНрд░реА-рд░реИрдк рдЖрдкрдХреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рднреА рд╕реНрдкреЗрд╕ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдпрд╣ рдЖрдкрдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рдЗрд╕реЗ рд▓рдкреЗрдЯрддрд╛ рд╣реИ) рдпрджрд┐ рдпрд╣ 1 рд▓рд╛рдЗрди рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
рд╡рд░реНрдб-рд░реИрдк: рдмреНрд░реЗрдХ-рд╡рд░реНрдб - рдкрд╛рда рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 1 рд▓рд╛рдЗрди рдкрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрдж рддрддреНрд╡ рдХреЛ рдирд╣реАрдВ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рд▓рд╛рдЗрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд╛рда рдЪрдпрди рдорд┐рд▓рддрд╛ рд╣реИ:

рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ:
рдЧрд┐рдЯрд╣рдм рд▓рд┐рдВрдХCodePenрд╡рд┐рд╕реНрддрд╛рд░
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдРрд╕реЗ рдорд╛рдорд▓реЗ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдкрд░рд┐рдгрд╛рдо (рд╕реЗрд▓реЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛) рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕реВрдЪреА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдФрд░, рд╕реАрдзреЗ, рдЖрд╡рдВрдЯрди рдПрдХ рдЕрд▓рдЧ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред