Jsdom: рдСрдлрд╝рд╕реЗрдЯрд╡рд┐рдбреНрде, рдСрдлрд╝рд╕реЗрдЯрд╣рд╛рдЗрдЯ, рдСрдлрд╝рд╕реЗрдЯрдЯреЙрдк, рдФрд░ рдСрдлрд╝рд╕реЗрдЯ рд▓реЗрдлреНрдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдлрд╝рд░ре░ 2011  ┬╖  32рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jsdom/jsdom

рдореИрдВ HighCharts рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдкрд░рд┐рдгрд╛рдореА рдПрд╕рд╡реАрдЬреА рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд╕рднреА рдЬрдЧрд╣ x, y, рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдорд╛рди рдЧрд╛рдпрдм рд╣реИрдВред рдХреБрдЫ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдСрдлрд╝рд╕реЗрдЯрд╡рд┐рдбреНрде, рдСрдлрд╝рд╕реЗрдЯ рд╣рд╛рдЗрдЯ, рдСрдлрд╝рд╕реЗрдЯрдЯреЙрдк рдФрд░ рдСрдлрд╝рд╕реЗрдЯ рд▓реЗрдлреНрдЯ рд╕рднреА рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред

рдХреНрдпрд╛ рдЗрди рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ? рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдХреЛрдИ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЗрд╕ рд╕рдордп рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

css feature layout needs tests

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ window рдЖрдкрдХрд╛ document.parentWindow рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпреБрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:
http://dev.w3.org/csswg/cssom-view/#dom -htmlelement-offsetleft

Object.defineProperties(window.HTMLElement.prototype, {
  offsetLeft: {
    get: function() { return parseFloat(window.getComputedStyle(this).marginLeft) || 0; }
  },
  offsetTop: {
    get: function() { return parseFloat(window.getComputedStyle(this).marginTop) || 0; }
  },
  offsetHeight: {
    get: function() { return parseFloat(window.getComputedStyle(this).height) || 0; }
  },
  offsetWidth: {
    get: function() { return parseFloat(window.getComputedStyle(this).width) || 0; }
  }
});

рд╕рднреА 32 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ http://www.w3.org/TR/cssom-view/ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╣рдордиреЗ cssom рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ SVG рдХреА рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдСрдлрд╝рд╕реЗрдЯ* рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдХреИрдирд╡рд╛рд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдХреИрд╕реА рд╣реИ? рдореИрдВ рд╣рд╛рдИрдЪрд╛рд░реНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдмреИрдХрдПрдВрдб рд╕реИрдЧ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреА рднреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдпрд╣ рднреА рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ :)

рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдЗрдХрд┐рд▓ рд╣реИ? рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдПрд╕рд╡реАрдЬреА 1.1 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕реЗ рдЬрдореАрди рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред

@tmpvar : рдореИрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЬреЗрдПрд╕-рд╕рд╛рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдирдпрд╛ рд╣реВрдВред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореБрдЭреЗ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХреЗрдВ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдореИрдВ рдХреБрдЫ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ :)

рд╕рд░реНрд╡рд░ рдкрд░ рд╣рд╛рдИрдЪрд╛рд░реНрдЯреНрд╕ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдПрд╕рд╡реАрдЬреА 1.1 рдореЗрдВ рднреА рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред рдореИрдВ рдорджрдж рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдореБрдЭреЗ рдПрд╕рд╡реАрдЬреА 1.0 рдФрд░ рдЬреЗрдПрд╕рдбреЙрдо рдореЗрдВ рдЗрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ;)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдкрд╣рд▓рд╛ рдХрджрдо рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ (http://www.w3.org/Graphics/SVG/WG/wiki/Test_Suite_Overview) рдФрд░ рдЗрд╕реЗ рд╣реЗрдбрд▓реЗрд╕ рдореЗрдВ рдмрджрд▓рдирд╛ (рдЬреЛ рдХрд╛рдлреА рдЙрдкрдХреНрд░рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)

рдлрд┐рд░ рд╣рдо рдПрдХ level2/svg.js рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рд╢рд╛рдпрдж рдЕрдВрддрддрдГ рдЗрд╕ рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рдореЗрд░реА jsdom рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЙрдЪреНрдЪ рдирд╣реАрдВ рд╣реИред

@href svg 1.0 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рдирдВрдЧреЗ рд╣реИред рдпрд╣ level1/core рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА svg рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, getBoundingCLientRect рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ svg рддрддреНрд╡ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЛрдб рд╣реИ:

var html = '<!DOCTYPE html><html><head><title></title></head><body style="margin: 0; padding: 0;"><svg id="svg" xmlns="http://www.w3.org/2000/svg" version="1.1" style="margin: 0; padding: 0;"><rect style="" x="10" y="10" width="100" height="100" rx="0" ry="0"/></svg></body></html>';

        jsdom.env({
            html : html,
            src: [jquery],
            done: function (errors, window) {
                var $ = window.$;
                var clientBox = $("#svg").find(type)[0].getBoundingClientRect();
                console.log(clientBox);
            }
        });

рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

{ bottom: 0, height: 0, left: 0, right: 0, top: 0, width: 0 }

рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдореИрдВ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрд╕реА рдПрдЪрдЯреАрдПрдордПрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ:

{ bottom: 110, height: 100, left: 10, right: 110, top: 10, width: 100 }

@ рдереНрд░реЛрд░рд┐рди19 : #653 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝реЗрдВред

рддреЛ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдирд╛рдореБрдордХрд┐рди рд╣реИ? рдЕрдм рддрдХ рдореИрдВ рдлреИрдВрдЯрдордЬреЗрдПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдЪрд┐рдВрддрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдмреЗрд╣рдж рдзреАрдорд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝рд╛ рдПрд╕рд╡реАрдЬреА рд╣реИ, рддреЛ рдпрд╣ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рд╕рдВрдкреВрд░реНрдг рд▓реЗрдЖрдЙрдЯ рдЗрдВрдЬрди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ред

рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдРрдВрдарди рд╣реЛрддреА рд╣реИ рдФрд░ рдореБрдЭреЗ рджреВрд░ рдЬрд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдПрд╕рд┐рдб рдХреЗ рдЕрд▓рд╛рд╡рд╛ рднреА рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

+1 рдЗрд╕реЗ рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рд╡рд╛рдВрдЫрдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдЦреЛрдЬрдиреЗ рдкрд░

рдореИрдВ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдЙрдЪрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ window рдЖрдкрдХрд╛ document.parentWindow рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЖрдкрдХреЛ рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпреБрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ:
http://dev.w3.org/csswg/cssom-view/#dom -htmlelement-offsetleft

Object.defineProperties(window.HTMLElement.prototype, {
  offsetLeft: {
    get: function() { return parseFloat(window.getComputedStyle(this).marginLeft) || 0; }
  },
  offsetTop: {
    get: function() { return parseFloat(window.getComputedStyle(this).marginTop) || 0; }
  },
  offsetHeight: {
    get: function() { return parseFloat(window.getComputedStyle(this).height) || 0; }
  },
  offsetWidth: {
    get: function() { return parseFloat(window.getComputedStyle(this).width) || 0; }
  }
});

tobyhinloopen рдиреЗ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рдХреНрдпрд╛ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдФрд░ рдХреЛ рд╕рдлрд▓рддрд╛ рдорд┐рд▓реА рд╣реИ?

@tobyhinloopen : рдореЗрд░реА рдЧреНрд░рд╛рдл рдкреГрд╖реНрдарднреВрдорд┐, рдЕрдХреНрд╖, рдФрд░ рд▓реЗрдмрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ (рдпрджреНрдпрдкрд┐ рдПрдХ рддрд┐рд░рдЫреЗ рддрд░реАрдХреЗ рд╕реЗ) рд▓реЗрдХрд┐рди рдмрд╛рдХреА рдЕрднреА рднреА рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдкреВрд░рд╛ рдЧреНрд░рд╛рдл рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ?

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдерд╛ рдЬрд╣рд╛рдВ рдореЗрд░реЗ рд╕реБрдЭрд╛рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдврд╝рд╛рдПрдБред рд╕рдВрднрд╛рд╡рд┐рдд рдСрдлрд╕реЗрдЯ рдКрдВрдЪрд╛рдИ/рдЪреМрдбрд╝рд╛рдИ рдореЗрдВ рдкреИрдбрд┐рдВрдЧ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИрдХреА рд╣реЙрдЯрдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

@tobyhinloopen рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ "рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ"

@zallek рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдСрдлрд╕реЗрдЯ рд▓реЗрдлреНрдЯ рд╕рдорд░реНрдерди рд╣реИ :) window.HTMLElement.prototype.offsetLeft рд▓реМрдЯрд╛рддрд╛ рд╣реИ? рдЕрдЧрд░ рдпрд╣ рдХреБрдЫ рднреА рд╣реИ рд▓реЗрдХрд┐рди рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛

рдмрд╕ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ @tobyhinloopen , рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдерд╛ред :)

@tobyhinloopen рд╕рдорд╛рдзрд╛рди рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рддрдм рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдореИрдВ рдСрдлрд╝рд╕реЗрдЯ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ this рдмрд╛рд╣рд░ рдХрд░рддрд╛ рд╣реВрдВред this рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдВрджрд░реНрдн рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдпрд╣реА рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ?

@jordantomax рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рддрддреНрд╡ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рди рдХрд┐ рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА HTML рддрддреНрд╡ рд╕реЗ рдХреЙрд▓ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рддреЛ 'рдпрд╣' рддрддреНрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

@tobyhinloopen рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдпрд╣реА рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛ред рдЬрдм рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ this рдХреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЬреЛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕реЗ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдирдореВрдирд╛ рд░реЗрдкреЛ рдмрдирд╛рдпрд╛ рд╣реИ, рд╢рд╛рдпрдж рдореЗрд░рд╛ рд╕реЗрдЯрдЕрдк рдЧрд▓рдд рд╣реИред

https://github.com/jordantomax/jest-htmlelement-prototype-sandbox

рд╕рдВрдмрдВрдзрд┐рдд, рдореБрдЭреЗ рдЬреЗрд╕реНрдЯ рдФрд░ jsdom рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ scrollIntoView рдЬреИрд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдореЗрдВ рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИ?

рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк get: () => {} - () => {} рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЖрдкрдХреЗ this рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп get() {} (рдЕрдиреБрд╢рдВрд╕рд┐рдд) рдпрд╛ get: function() {} (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред @jordantomax

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#No_separate_this

рдЖрдк рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ it / describe рднреА => рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЬреЗрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рдореЛрдЪрд╛ рдореЗрдВ рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ this рдЖрдкрдХреЗ it / test / describe рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЙрди рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЛрдЪрд╛ рдореЗрдВ this.slow() , this.timeout(4000) рдЖрджрд┐ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВред

https://mochajs.org/#arrow -functions

рд╕рдВрдмрдВрдзрд┐рдд, рдореБрдЭреЗ рдЬреЗрд╕реНрдЯ рдФрд░ jsdom рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░реЙрд▓рдЗрдиреНрдЯреЛрд╡реНрдпреВ рдЬреИрд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдореЗрдВ рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИ?

рдЖрдорддреМрд░ рдкрд░ рдПрдордбреАрдПрди рдкрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдкреЙрд▓реАрдлрд┐рд▓ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдХреЗрд╡рд▓ рдЙрд╕ рдпреБрдХреНрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛред рдпрджрд┐ рд╕рдм рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдПрдХ рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред JSDom рдХрд╛ рдЕрдкрдирд╛ рд╕реНрдерд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдХрдИ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЧреБрдгрдХ рднреА) рдЬрдмрдХрд┐ рдЖрдкрдХреА рд╡рд┐рдХрд╛рд╕ рдорд╢реАрди рдХреЛ рд░реАрдпрд▓рдЯрд╛рдЗрдо рдХреА рд░рд┐рдкреЛрд░реНрдЯ рднреА рдХрд░рддреЗ рд╣реИрдВред IIRC рдХрд░реНрдо рдпрд╣ рдХрд░рддрд╛ рд╣реИ -> https://karma-runner.github.io/latest/index.html

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

@tobyhinloopen рдареАрдХ рд╣реИ рдЖрдк рд╕рднреА рдЦрд╛рддреЛрдВ рдкрд░ рд╣реИрдВ! рд╢реБрдХреНрд░рд┐рдпрд╛!! рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реВрдВ рдХрд┐ getComputedStyle рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рд╕реЗрдЯрд░ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ:

Object.defineProperties(window.HTMLElement.prototype, {
  offsetTop: {
    get () {
      return this.marginTop
    },
    set (offset) {
      this.marginTop = offset
    }
  }
})

рдкреБрдирдГ рдзрдиреНрдпрд╡рд╛рдж ЁЯЩП

@jordantomax getComputedStyle рд╕рднреА CSS рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдгрдирд╛ рд╢реИрд▓реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ (рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ, style рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╛ JS рд╕реЗ)ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ this.marginTop рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд░рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд▓рд┐рдП, рд╕рднреА рд╕реАрдПрд╕рдПрд╕ рдкреНрд░реЛрдк рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ)

@tobyhinloopen рдЖрд╣, рд╕рдордЭ рдЧрдпрд╛ред рд╢реБрдХреНрд░рд┐рдпрд╛!

рдзрдиреНрдпрд╡рд╛рдж @tobyhinloopen ред рдореИрдВ рдФрд░ рднреА рдЫреЛрдЯреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getComputedStyle рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрднреА рднреА рдЕрдкрдиреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХреЛрдИ рд╕реАрдПрд╕рдПрд╕ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЗрдирд▓рд╛рдЗрди рди рд╣реЛ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ .style рдкрд░реНрдпрд╛рдкреНрдд рдФрд░ рддреЗрдЬрд╝ рд╣реИред

Object.defineProperties(window.HTMLElement.prototype, {
  offsetLeft: {
    get () { return parseFloat(this.style.marginLeft) || 0 }
  },
  offsetTop: {
    get () { return parseFloat(this.style.marginTop) || 0 }
  },
  offsetHeight: {
    get () { return parseFloat(this.style.height) || 0 }
  },
  offsetWidth: {
    get () { return parseFloat(this.style.width) || 0 }
  }
})

рдХреНрдпрд╛ рдпрд╣ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдСрдлрд╕реЗрдЯрд╡рд┐рдбреНрде = 0 . рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ

   const dom = new JSDOM(`<!DOCTYPE html><body></body>`);
    let document = dom.window.document
    let span = document.createElement("span");
    span.innerHtml = 'test
    span.style.fontSize = 150 + 'px';
    span.style.fontFamily = 'Arial'
    document.body.appendChild(span)
    console.log(span.offsetWidth) // 0

рдХреНрдпрд╛ рдпрд╣ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдСрдлрд╕реЗрдЯрд╡рд┐рдбреНрде = 0 . рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ

@petran рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рдирд╛ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдирд╣реАрдВ рд╣реИ рдХрд┐ jsdom рдЖрдкрдХреЗ SPAN рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░реЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдлрд╝реЙрдиреНрдЯ рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рд╕рднреА рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА CSS рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ JSDOM рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдЕрдиреБрдХрд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

philipwalton picture philipwalton  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

eszthoff picture eszthoff  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

machineghost picture machineghost  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

JacksonGariety picture JacksonGariety  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

potapovDim picture potapovDim  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ