[whatwg] getElementsByIdPart
chriswa at comcast.net
chriswa at comcast.net
Thu Aug 26 13:38:34 PDT 2004
Ok, I finally worked up an example using XPATH that does what I want.
document.getElementsById = function(term)
{
var xpathString = "//*[contains(@id,'" + term.toString() + "')]"
var xpathResult = document.evaluate(xpathString, document, null, 0, null);
var outArray = new Array();
while ((outArray[outArray.length] = xpathResult.iterateNext())) { }
return outArray;
}
function OnLoad()
{
//alert( "loading" );
debugger; var elements = document.getElementsById( "FormItem1" );
alert( elements.length ); alert( elements.length );
for ( var ii = 0; ii < elements.length; ++ii )
{
alert( ii + ": ==> " + elements[ii].id );
}
}
This works in Mozilla and I can use the indexOf technique for IE.
Thanks to everyone who challenged my assumptions.
Chris
> Thanks Ian for your response.
>
> What I'm looking for is a way to apply a regular expression that can return
> matched elements. What I am doing is taking advantage of the way ASP.NET
> generates id names and use javascript to group them together as structures.
>
> For example:
>
> a - <input id="outer1_inner1_element">
> b - <input id="outer1_inner1_image">
> c - <input id="outer1_inner2_element">
> d - <input id="outer1_inner2_image">
> e - <input id="outer2_inner1_image">
> f - <input id="outer2_inner1_image">
>
> What I'd like to do is the following:
>
> var elOuter1 = getElementsById(/outer1/) // returns elements a - d
> var elOuter1_Inner1 = getElementsById(/outer1_inner1/) // returns elements a,
> b
>
> The point is that rather than having an exact match as getElementsByName does
> now you can match on segments of the id attribute. Currently the only way to do
> this now is to do the following:
>
> var inputElements = getElementsByTagName( "input" );
> var elOuter1 = [];
> for ( var ii = 0; ii < inputElements.length; ++ii )
> {
> if ( inputElements[ii].indexOf( "outer1" ) != -1 )
> elOuter[ii] = inputElments[ii];
> }
>
> I am assuming that having an instrinic function (most likely written in C++)
> would be more performant than doing the above JavaScript and since the
> information is already available to the DOM and I'm assuming that this would be
> a trival function to implement. I appreciate the suggessions to use XPATH but I
> haven't found an easy, straightforward and compatible solution (as HTML docs are
> incompatable).
>
> Thanks,
> Chris
>
>
>
>
>
> > On Sat, 21 Aug 2004, Doron Rosenberg wrote:
> > >
> > > Wouldn't a getElementsByAttribute be a more flexiable solution?
> >
> > It depends, what exactly did you have in mind?
> >
> > Note that the "." selector in CSS can't be directly emulated even with a
> > single "[ =~ ]" selector.
> >
> > I think for most uses, DOM Traversal is the way to go here.
> > getElementsByClass is IMHO an exception, in that implementing it as a node
> > filter is non-trivial.
> >
> > --
> > Ian Hickson U+1047E )\._.,--....,'``. fL
> > http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
> > Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
More information about the whatwg
mailing list