dojo.NodeList 1.

create a node list from a nodes
new dojo.NodeList(dojo.byId("foo"));
<ul id="nodelist1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
var links = new dojo.NodeList(dojo.byId('nodelist1')).query('a');
dojo.forEach(links,function(item){dojo.toggleClass(item,'found')});
Returns a new, flattened NodeList.
new dojo.NodeList(dojo.byId("foo"));
<ul id="query1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
var links = dojo.query('#query1 > li').query('a[href$=".net"]');
dojo.forEach(links,function(item){dojo.toggleClass(item,'found')});
OR
dojo.query('#query1 >li').query('a[href$=".net"]')
    .filter(function(item){dojo.toggleClass(item,'found')});
Exclude nodes from the list.
var foo = dojo.NodeList.filter(simpleQuery: String);
<ul id="filter1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
var nets = dojo.query('a','filter1').filter('a[href$=".net"]');
dojo.forEach(nets, function(item){item.className = 'found'});
*Note: dojo.query('a','filter1').filter('a[href$=".net"]').className='found'; doesn't work as expected.

dojo.query('a:not([href$=".net"])','filter2').filter(function(item){
    dojo.toggleClass(item,'found')},this);
Transformation of the NodeList.
var foo = dojo.NodeList.map(func: Function, obj: Function?);
<ul id="map1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
dojo.query('a[href$=".net"]','map1').map(function(item){
    dojo.toggleClass(item.parentNode,'found')});

var items = dojo.query(".some_class")
    .map(function(item, index, arr){
        return (index % 2) ? item : item.parentNode;
    }, this);
Inclue node(s) to the list.
var foo = dojo.NodeList.concat(Item: Object);
<ul id="concat1">
    <li><a href="domain_1.info">domain_1.info</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
dojo.query('a[href$=".com"]','concat1')
    .concat(dojo.query('a[href$=".org"]'))
    .concat(dojo.query('a[href$=".net"]'))
    .map(function(item){
       dojo.toggleClass(item.parentNode,'found');
});
Specifying exact start and end positions in the list to extract a subset.
var foo = dojo.NodeList.slice(Item: Object);
<ul id="slice1">
    <li><a href="domain_1.com">domain_1.com</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.com">domain_3.com</a><li>
    <li><a href="domain_4.com">domain_4.com</a><li>
</ul>
var items = dojo.query('a[href$=".com"]','slice1')
    .map(function(item){
            return item.parentNode;
        },this)
	.slice(1,3);
dojo.forEach(items,function(item){dojo.toggleClass(item,'found')});
Removes/replace the subset of items from the list.
var foo = dojo.NodeList.splice(Item: Object);
<ul id="splice1">
    <li><a href="domain_1.com">domain_1.com</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.com">domain_3.com</a><li>
    <li><a href="domain_4.com">domain_4.com</a><li>
</ul>
var items = dojo.query('a','splice1')
    .map(function(item){return item.parentNode},this)
    .splice(1,2);
    dojo.forEach(items,function(item){dojo.toggleClass(item,'found')});
* Note: remove from the NodeList, not from the DOM!
The most basec of methods made available for operation on NodeList contents.
var foo = dojo.NodeList.forEach(callback, thisObj);
<ul id="concat1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
var items = dojo.query("a:not([href$='.net'])",'foreach1')
    .map(function(item){
        return item.parentNode;
    })
    .forEach(function(item){dojo.toggleClass(item,'found')});
Add a node or some HTML as a string to every item in the list.
var foo = dojo.NodeList.addContent(content: String, position: String|Integer);
<div id="addcontent1">
    <div>DIV 1</div>
    <div>DIV 2</div>
    <div>DIV 3</div>
</div>
dojo.query('div','addcontent1')
.addContent('<span class="att">!!! </span>','first');
DIV 1
DIV 2
DIV 3
orphan(): removes elements in this list.
var foo = dojo.NodeList.orphan(simpleFilter: String);
<ul id="orphan1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
<ul id="orphan2">
    <li><a href="domain_5.info">domain_5.info</a><li>
</ul>
var orphan_com = dojo.query('a[href$=".com"]','orphan1')
.map(function(item){ return item.parentNode; })
.orphan();
dojo.query('#orphan2').adopt(orphan_com,'first');
*Note:
1. The second optional parameter (default is 'last') can be:
first|last|before|after as well as numeric index positions.
For 'Reset' I use here the '2' index, but I've found that it is 'buggy'.
2. The statement: dojo.query('li','orphan1')[0].orphan(); does not work.
3. The orphan() does not work correct with an anonymous block (need more testing).
Move/inset nodes in the DOM structure.
var foo = dojo.NodeList.place(queryOrNode: String|Node, position: String);
<ul id="place1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
dojo.query('#place1 > li:first-child')
.place('#place1 > li:last-child','after');
empty(): clears all content from each node in the list.
var foo = dojo.NodeList.empty(simpleFilter: String);
<ul id="empty1">
    Before
    <li>LI 1 <span>content</span></li>
    <li>LI 2 <span>content</span></li>
    <li>LI 3 <span>content</span></li>
    After
</ul>
dojo.query('li > span','empty1').empty();
    Before
  • LI 1 content
  • LI 2 content
  • LI 3 content
  • After
dojo.query('#empty1 > li').empty();
    Before
  • LI 1 content
  • LI 2 content
  • LI 3 content
  • After
dojo.query('#empty1').empty();
    Before
  • LI 1 content
  • LI 2 content
  • LI 3 content
  • After

attr(): gets or sets the DOM attribute for every element in the NodeList.
var foo = dojo.NodeList.attr(property: String, value: String);
<ul id="attr1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
dojo.query('a:not([href$=".net"])','attr1')
.attr('style',{'background': '#FFF000'});

dojo.attr(dojo.byId('someId'),{
    name:'some_name',
    innerHTML: 'some content',
	style:{
	    background: '#FFF',
		border: '1px solid #000',
		padding: '3px'
	}
});
style(): gets or sets the CSS property for every element in the NodeList.
var foo = dojo.NodeList.style(property: String, value: String);
<ul id="style1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
dojo.query('a:not([href$=".net"])','style1')
.map(function(item){
    item.style.color = 'crimson'; // style of the A
    return item.parentNode; })
.style({'color':'crimson','background':'#DDD', // style of the LI
    'borderTop':'1px dotted olive'});
addClass(), removeClass() add/remove CSS className.
    <style>
        .y_bg { backgournd: #FFF000; }
        .att  { color: crimson; }
    </style>
<ul id="addremove1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
dojo.query('a[href$=".net"]','addremove1').addClass('att');
dojo.query('a[href$=".net"]','addremove1').removeClass('att');
dojo.query('a[href$=".net"]','addremove1').removeClass('att').addClass('y_bg');
dojo.query('a[href$=".net"]','addremove1').removeClass('att').removeClass('y_bg');
toggleClass() toggle CSS className.
    <style>
        .att  { color: crimson; }
    </style>
<ul id="addremove1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
dojo.query('a[href$=".net"]','toggle1').toggleClass('att');
var foo = dojo.NodeList.indexOf(value: Object, fromIndex: Integer);
var foo = dojo.NodeList.lastIndexOf(value: Object, fromIndex: Integer);
The primary difference between Array function with the same name is that the acted-on array is implicitly this NodeList.
<ul id="indexof1">
    <li><a href="domain_1.net" id="1">domain_1.net</a><li>
    <li><a href="domain_2.com" id="2">domain_2.com</a><li>
    <li><a href="domain_3.org" id="3">domain_3.org</a><li>
    <li><a href="domain_4.net" id="4">domain_4.net</a><li>
</ul>
var i = dojo.query('a','indexof1').indexOf(dojo.byId('3'));
alert(i);
In my understanding it should work like that:

var i = dojo.query('a[href$=".net"]','indexof1').indexOf();
OR
var i = dojo.indexOf(dojo.query('a[href$=".net"]','indexof1'));
OR
var list = dojo.query('#indexof1 > li');
var i = list.indexOf(dojo.query('a[href$=".net"]');

but it doesn't.
dojo.NodeList.some(callback: Function, thisObject: Object)
dojo.NodeList.every(callback: Function, thisObject: Object)
<div id="some1">
  <table>
    <tbody>
      <tr><td>first</td><td>middle</td><td>last</td></tr>
      <tr><td>abc</td><td>second</td><td></td></tr>
      <tr><td></td><td></td><td></td></tr>
      <tr><td></td><td>second</td><td>fifth</td></tr>
      <tr><td></td><td></td><td></td></tr>
    </tbody>
  </table>
</div>
// hide empty table rows
dojo.query('tbody > tr','some1').filter(function(tr){
    return dojo.query('td',tr)
      .every("return ! item.innerHTML.length;"); // string as function
}).style('display','none');
firstmiddlelast
abcsecond
secondfifth
at()(Index: Integer(s)).
Returns a new NodeList comprised of items in this NodeList at the given index or indexes.
<ul id="at1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
dojo.query('a','at1').at(1,3).toggleClass('y_bg');
under constraction
dojo.NodeList.connect()
.connect('event', function(e){
'e' is normalized via dojo.connect(). Supports shortcuts.
<ul id="connect1">
    <li><a href="domain_1.net">domain_1.net</a><li>
    <li><a href="domain_2.com">domain_2.com</a><li>
    <li><a href="domain_3.org">domain_3.org</a><li>
    <li><a href="domain_4.net">domain_4.net</a><li>
</ul>
dojo.query('a','connect1')
.onmouseover(function(e){e.target.style.color = 'crimson'})
.onmouseout(function(e){e.target.style.color = '#626262'});
dojo.extend()
The call to dojo.extend() installs into dojo.NodeList a new method.
dojo.extend(dojo.NodeList,{
    also: function(query){
        return this.concat(dojo.query(query));
    }
});
dojo.query('a[href$=".net"]','extend1')
.also('a[href$=".org"]')
.also('a[href$=".com"]')
.toggleClass('y_bg');