AngularJS рдореЗрдВ ckEditor рдХреЛ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░реЗрдВ

рд╢реБрдн рджрд┐рди, рдкреНрд░рд┐рдп Khabrovitesред

рдЕрдм рдХрдИ рдорд╣реАрдиреЛрдВ рд╕реЗ рдореИрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ AngularJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ "рдкреНрд░рд╢рдВрд╕рдиреАрдп рдЧрд╛рдиреЗ" рдирд╣реАрдВ рдЧрд╛рдКрдВрдЧрд╛ рдпрд╛ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЛ рдирд╣реАрдВ рдмрдврд╝рд╛рдКрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЖрджрд░реНрд╢ рдЪреАрдЬреЗрдВ рдирд╣реАрдВ рд╣реИрдВ (рдФрд░ рдпрд╣ рд╢рд╛рдпрдж рдЙрди рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рджреБрдирд┐рдпрд╛ рдореЗрдВ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдмрд╛рдК рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА "рд░рдЪрдирд╛рддреНрдордХрддрд╛" рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдХрдорд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдирд╣реАрдВ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ)ред рдореИрдВ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рд╢рдмреНрдж рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ: AngularJS рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдореЗрд░реЗ рдЪреЗрд╣рд░реЗ рдореЗрдВ рдХреЛрдб рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдЬрд╛рджреВ рдЙрдкрдХрд░рдг рдирд┐рд░реНрджреЗрд╢ рджреЗрддреА рд╣реИред рд╡реИрд╕реЗ, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХреЙрд░реНрдирд░рдЬреЗрдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдиреЛрдЯ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗрдВрджреНрд░ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ, рдФрд░ рдЗрд╕ рд╕рд╛рд▓ Google I / O рдкрд░ рдХрд╕реНрдЯрдо-рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЦрдмрд░ рдереА (рди рдХреЗрд╡рд▓ рдЯреИрдЧ, рдмрд▓реНрдХрд┐ рдкреЗрдЬ рдореЗрдВ рдЬрдЯрд┐рд▓ рдПрдЪрдЯреАрдПрдордПрд▓ рдШрдЯрдХ рдПрдореНрдмреЗрдбреЗрдб рдереЗ)ред

рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ, рдПрдХ рдЙрдиреНрдирдд WYSIWYG рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдЙрдареЗ рдФрд░ рдореЗрд░реА рдЖрдБрдЦреЗрдВ рддреБрд░рдВрдд рд╣реА ckEditor рдкрд░ рдЖ рдЧрдИрдВ , рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ DotNetNuke рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдХрдИ рдмрд╛рд░ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдореЗрд░реЗ рдЗрдВрдкреНрд░реЗрд╢рди рдмрд╣реБрдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдереЗ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдЗрд╕реЗ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд░рдЦрд╛: рдШрдЯрдХ рдореЗрдВ рдордЬрдмреВрдд рдЦрд╛рдорд┐рдпрд╛рдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдФрд░ рдПрдХреАрдХрд░рдг рдореЗрдВ рдШрдВрдЯреЛрдВ рдХрд╛ рд╕рдордп рд▓рдЧрд╛)ред

рдПрдХреАрдХрд░рдг рдЬрд╛рджреВ рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП Google рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдФрд░ рдЕрдиреНрдп рдирд┐рдЬреА рдмреНрд▓реЙрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рд▓рд┐рдВрдХ рдорд┐рд▓реЗ, рдЬрд╣рд╛рдВ рдкреЗрд╕реНрдЯрд╕реНрдЯреИрдЯ рдШрдЯрдирд╛ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдФрд░ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рд╕рд░рд▓ рдФрд░ рд╕реБрд▓рдн рджрд┐рдЦрддрд╛ рд╣реИ:

app.directive('ckEditor', [function () { return { require: '?ngModel', link: function ($scope, elm, attr, ngModel) { var ck = CKEDITOR.replace(elm[0]); ck.on('pasteState', function () { $scope.$apply(function () { ngModel.$setViewValue(ck.getData()); }); }); ngModel.$render = function (value) { ck.setData(ngModel.$modelValue); }; } }; }]); 


рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рдореЗрд▓рд╕реНрдЯреЛрди рдФрд░ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж, рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдпрд╣ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдХрднреА-рдХрднреА рд╕рдВрдкрд╛рджрд┐рдд рдкрд╛рда рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдШрдЯрдХ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕реЗрд╕рдкреНрд▓рдирд░ (<9) рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЖрджрд░реНрд╢ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдереАрдВ, рдФрд░ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдЧрдпрд╛ рдерд╛ред

рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддрд╕реНрд╡реАрд░ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреЛ рдкреЛрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдпрд╣ рдШрдЯрдирд╛ рдХреАрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдкреНрд▓рдЧ-рдЗрди рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдореНрдорд┐рд▓рди (рдпрд╣ рдкрд╛рда, рдЪрд┐рддреНрд░ рдЖрджрд┐) рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрддреА рд╣реИред рдпрд╣ рддреБрд░рдВрдд рдПрдХ рдирдИ рдШрдЯрдирд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рдЕрдзрд┐рдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИред рд▓реЗрдХрд┐рди рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ "рдЧреИрд░-рд░реВрдврд╝рд┐рд╡рд╛рджреА" рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛, рдЬреЛ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдкреНрд▓рдЧ-рдЗрди рднреА рд╣реИ (рдФрд░ рдпрд╣ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдпрд╛ рд╕реНрд╡рдпрдВ ckEditor рдХреЗ рдЕрдкрдбреЗрдЯ рд╕реЗ рднрд░рд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рд╕рдВрдкрд╛рджрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд╡реАрдирддрдо рдЙрдкрд▓рдмреНрдз (рдЙрд╕ рд╕рдордп CKEditor 4.2.1), рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдЬреЛрдЦрд┐рдо рдореЗрдВ рдбрд╛рд▓рдирд╛ рдФрд░ рджреЗрд╢реА рдПрдкреАрдЖрдИ рдХреЗ рд╕реНрддрд░ рдкрд░ рдПрдХ рдЬрд╛рджреВ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рд┐рд░реНрдл рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдкреВрд░реНрд╡реЛрдХреНрдд рдкреНрд▓рдЧ-рдЗрди рдХреЛ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реЛ, рдореИрдВрдиреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)ред рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдШрдЯрдирд╛ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реА, рд▓реЗрдХрд┐рди рдПрдХреНрд╕реЗрд╕ рдЙрд▓реНрд▓рдВрдШрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реБрдЖред

IE <9 (IE рдХреЗ рд▓рд┐рдП рдкреЙрдкрдЕрдк рд╡рд┐рдВрдбреЛ рдХреЗ рдХрдбрд╝рд╡реЗ рдЕрдиреБрднрд╡ рджреНрд╡рд╛рд░рд╛ рд╕рд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдХреБрдХреАрдЬрд╝, рдЖрджрд┐ рдХреЗ рдПрдХ рдкреВрд░реНрдг рд░реАрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдбреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ), рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ iframe рдШрдЯрдХ рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ ckEditor рдХреЗ рдЕрдВрджрд░ рд╕реНрд╡рдпрдВ рдмрдирд╛рдиреЗ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдХреНрд░рдо рд╣реИред рд╕рд╛рде рд╣реА AngularJS рдХреЗ рднреАрддрд░ рдЬреАрд╡рди рдЪрдХреНрд░ рднреАред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ CKEDITOR.replace (...) рд╡рд┐рдзрд┐ рдкреБрд░рд╛рдиреЗ IEs рдореЗрдВ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓рддреА рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ "рдЬрд╛рдиреЗ рджреЗрдирд╛" AngularJS рдореЙрдбрд▓ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдФрд░ рд╕реЗрдЯрдбреЗрдЯрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рддреИрдпрд╛рд░ iframe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХреНрд╕реЗрд╕ рдЙрд▓реНрд▓рдВрдШрди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрддрд╛рд░ рд╕реЗ "рдмреЗрд╣рддрд░" рдпрд╛ "рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп" рдХреБрдЫ рднреА рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрди рдирд┐рд░реНрджреЗрд╢ рдХреЛрдб рдерд╛:

 app.directive('ckEditor', [function () { return { require: '?ngModel', restrict: 'C', link: function (scope, elm, attr, model) { var isReady = false; var data = []; var ck = CKEDITOR.replace(elm[0]); function setData() { if (!data.length) { return; } var d = data.splice(0, 1); ck.setData(d[0] || '<span></span>', function () { setData(); isReady = true; }); } ck.on('instanceReady', function (e) { if (model) { setData(); } }); elm.bind('$destroy', function () { ck.destroy(false); }); if (model) { ck.on('change', function () { scope.$apply(function () { var data = ck.getData(); if (data == '<span></span>') { data = null; } model.$setViewValue(data); }); }); model.$render = function (value) { if (model.$viewValue === undefined) { model.$setViewValue(null); model.$viewValue = null; } data.push(model.$viewValue); if (isReady) { isReady = false; setData(); } }; } } }; }]); 


рдореЙрдбрд▓ рдХреА рдХрддрд╛рд░ рдФрд░ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рдХреНрд╖рдг рд╣реИрдВред $ ViewValue (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпреЗ рдореЙрдбрд▓ рд╕рдВрд╡рд╛рджреЛрдВ рдореЗрдВ рдПрдХ рдШрдЯрдХ рдХреЗ рд▓реБрдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рдереЗ, рдЬрд┐рд╕реЗ рдЯреНрд╡рд┐рдЯрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдореЙрдбрд░реНрди рдШрдЯрдХ рдкреИрдЪ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИ)ред

рд╕рд╛рде рд╣реА, рдореИрдВрдиреЗ рд╕реЗрдЯрдбреЗрдЯрд╛ (..., рдХреЙрд▓рдмреИрдХ) рд╕реЗ рдЬреБрдбрд╝реЗ рдХреНрд╖рдгреЛрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрдВрддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди, рдРрд╕рд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдХреЛрдб рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рд╢рдмреНрджреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

рдореИрдВ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рдФрд░ рдЖрд▓реЛрдЪрдирд╛ рд╕реБрдиреВрдВрдЧрд╛ред

рдкреБрдирд╢реНрдЪ
рдореБрдЭреЗ рдЬреЛ рдХреБрдЫ рдорд┐рд▓рд╛ рд╣реИ рдЙрд╕рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ http://jsfiddle.net/jWANb/2/
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХреНрдпрд╛ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдЙрд╕рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг http://jsfiddle.net/fvApg/1/

рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдЪрд┐рддреНрд░ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ "рдкрд░рд┐рдгрд╛рдо html" рджреЗрдЦреЗрдВред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред

Source: https://habr.com/ru/post/In200058/


All Articles