This example demonstrates how to retrieve and use a Node
instance
and access DOM properties.
Press a button to get or set the offsetWidth
of the div
containing the corn image.
Setting up the HTML
<div id="ruler"></div> <div id="corn"> <div class="ruler-marker"></div> <div id="output">? px</div> </div> <label>Width:</label> <input id="input" size="2" value="550"> px <button class="yui3-button btn-set">Set</button> <button class="yui3-button btn-get">Get</button>
Getting a Node Instance
The Y.one
method accepts a Selector or HTML element and
returns a Node instance. First we'll set up some variables
for the node's representing our HTML.
var corn = Y.one('#corn'), input = Y.one('.example #input'), output = Y.one('.example #output');
Accessing Node Properties
The properties of a node can be accessed via its set
and
get
methods.
In most cases, simple type of properties (strings, numbers, Booleans)
pass directly to/from the underlying DOM node, however properties representing
other DOM nodes return Node
or NodeList
instances.
The Get Method
We can use the get
method to read the offsetWidth
of the div
containing the corn image,
which includes the style width, padding, and border.
width = corn.get('offsetWidth');
The Set Method
The Set method can be used to set the value of objects
input.set('value', 237);
The offsetWidth
property of an HTML element is read only, however YUI
makes this writeable. This assures that the final offsetWidth
matches the value that is set, regardless of borders, padding, or box model.
corn.set('offsetWidth', value);
Listening for Node Events
We will update the value offsetWidth
property of the div
containing the corn image when the Set button is pressed.
Y.one('.example .btn-set').on('click', function(e) { ... corn.set('offsetWidth', value); ... };
Complete Example Source
<style> .example #corn{ position: relative; background: url(../assets/node/images/corn.jpg); width: 232px; height: 181px; -moz-box-shadow: 3px 3px 12px rgba(0, 0, 0, 0.4); -webkit-box-shadow: 3px 3px 12px rgba(0, 0, 0, 0.4); margin: 2px 0 1em; border: none; } .example #ruler{ width: 650px; height: 42px; background: url("../assets/node/images/ruler_ticks.png") repeat-x scroll -1px 24px #DDCEB7; } .example .yui3-button { margin: 0 0.2em; } .example .btn-get{ margin-left: 4em; } #input { height: 1.6em; width: 4em; } #output{ position: absolute; top: -40px; width: 100px; height: 40px; right: -50px; text-align: center; cursor: pointer; } #corn .ruler-marker{ position: absolute; top: -20px; right: 0; height: 30px; border-right: solid 1px #f00; } </style> <body> <div id="ruler"></div> <div id="corn"> <div class="ruler-marker"></div> <div id="output">? px</div> </div> <label>Width:</label> <input id="input" size="2" value="550"> px <button class="yui3-button btn-set">Set</button> <button class="yui3-button btn-get">Get</button> <script> YUI().use('node', 'button', function(Y) { var corn = Y.one('#corn'), input = Y.one('.example #input'), output = Y.one('.example #output'); var getWidth = function(){ var width = corn.get('offsetWidth'); output.setHTML(width + 'px'); // display width near the get button } Y.one('.example .btn-get').on('click', getWidth); output.on('click', getWidth); // also allows getting width by clicking on ruler width label Y.one('.example .btn-set').on('click', function(e) { var value = input.get('value'), width = corn.get('offsetWidth'); if (value == '') { input.set('value', width); } else if (!isNaN(parseInt(value))) { // if the value in the input is a number corn.set('offsetWidth', value); output.setHTML('? ' + 'px'); // clear out the width label on the ruler } }); }); </script>