On modern browsers you can do this via
document.querySelectorAll('*[id]')
should do the job.
If you need all descendants of myElement
with IDs, then do
myElement.querySelectorAll('*[id]')
If you want to be really careful to exclude <span id="">
, then maybe
document.querySelectorAll('*[id]:not([id=""])')
If compatibility with older browsers is required
var allElements = document.getElementsByTagName("*");
var allIds = [];
for (var i = 0, n = allElements.length; i < n; ++i) {
var el = allElements[i];
if (el.id) { allIds.push(el.id); }
}
should leave you with all the IDs in allIds
.
If you find you need to just enumerate the IDs under a particular form node, then you can replace document.getElementsByTagName
with myFormNode.getElementsByTagName
.
If you want to include both IDs and NAMEs, then put
else if (el.name) { allIds.push(el.name); }
below the if
above.