Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #31713 > unrolled thread

How to reference an updated document object and to have all of its elements and associated values if any as well?

Started byjustaguy <lichunshen84@gmail.com>
First post2016-11-13 10:01 -0800
Last post2016-11-14 18:51 +0700
Articles 6 — 5 participants

Back to article view | Back to comp.lang.javascript


Contents

  How to reference an updated document object and to have all of its elements and associated values if any as well? justaguy <lichunshen84@gmail.com> - 2016-11-13 10:01 -0800
    Re: How to reference an updated document object and to have all of its elements and associated values if any as well? Martin Honnen <martin.honnen@gmx.de> - 2016-11-14 12:40 +0100
      Re: How to reference an updated document object and to have all of its elements and associated values if any as well? "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2016-11-14 14:16 +0100
      Re: How to reference an updated document object and to have all of its elements and associated values if any as well? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2016-11-14 17:26 +0100
        Re: How to reference an updated document object and to have all of its elements and associated values if any as well? justaguy <lichunshen84@gmail.com> - 2016-11-14 12:48 -0800
    Re: How to reference an updated document object and to have all of its elements and associated values if any as well? JJ <jj4public@vfemail.net> - 2016-11-14 18:51 +0700

#31713 — How to reference an updated document object and to have all of its elements and associated values if any as well?

Fromjustaguy <lichunshen84@gmail.com>
Date2016-11-13 10:01 -0800
SubjectHow to reference an updated document object and to have all of its elements and associated values if any as well?
Message-ID<62558672-b8d4-495a-8ccf-4bce9399d64d@googlegroups.com>
Start:
<html>
<head>
  <script>
     var addEle = function() {
         var newEl = document.createElement('span')';
             document.body.appendChild(newEl);
         // other types of elements addition as well, ie. input
     }
  </script>
</head>
<body>
  <button onclick="addEle">Add Element</button>

</body>
</html>

Process:
A user adds some elements to the page (document).

Question:
Now, how do I reference / retrieve all the elements and associated values if any for this document?

document.all was for old IE browser only, hence, irrelevant for other modern browsers.

Thanks.

[toc] | [next] | [standalone]


#31714

FromMartin Honnen <martin.honnen@gmx.de>
Date2016-11-14 12:40 +0100
Message-ID<o0c7sb$lr4$1@news.albasani.net>
In reply to#31713
On 13.11.2016 19:01, justaguy wrote:

> Now, how do I reference / retrieve all the elements and associated values if any for this document?

Well, the
   document
object contains all elements and associated values. It is not clear in 
which form you want to "retrieve" the elements or values.

> document.all was for old IE browser only, hence, irrelevant for other modern browsers.

document.getElementsByTagName('*') gives you all elements as an 
HTMLCollection , see 
https://dom.spec.whatwg.org/#concept-getelementsbytagname/

[toc] | [prev] | [next] | [standalone]


#31716

From"Evertjan." <exxjxw.hannivoort@inter.nl.net>
Date2016-11-14 14:16 +0100
Message-ID<XnsA6C09132C927Ceejj99@194.109.6.166>
In reply to#31714
Martin Honnen <martin.honnen@gmx.de> wrote on 14 Nov 2016 in
comp.lang.javascript: 

>> document.all was for old IE browser only, hence, irrelevant for other
>> modern browsers. 
> 
> document.getElementsByTagName('*') gives you all elements as an 
> HTMLCollection , see 
> https://dom.spec.whatwg.org/#concept-getelementsbytagname/

Indeed, but in fact it is a Nodelist in WebKit browsers.

===========

document.querySelectorAll('*')

seems to return an HTMLCollection there.

=============

An HTMLCollection is 'live', is a Nodelist 'live' less alive?

-- 
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)

[toc] | [prev] | [next] | [standalone]


#31719

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2016-11-14 17:26 +0100
Message-ID<2029592.ElGaqSPkdT@PointedEars.de>
In reply to#31714
Martin Honnen wrote:

> On 13.11.2016 19:01, justaguy wrote:
>> Now, how do I reference / retrieve all the elements and associated values
>> if any for this document?
> 
> Well, the
>    document
> object contains all elements and associated values. It is not clear in
> which form you want to "retrieve" the elements or values.
> 
>> document.all was for old IE browser only, hence, irrelevant for other
>> modern browsers.
> 
> document.getElementsByTagName('*') gives you all elements as an
> HTMLCollection , see
> https://dom.spec.whatwg.org/#concept-getelementsbytagname/

This URI does not work here inasfar as that it does not navigate to the 
section in question.  The URI that does it is currently

<https://dom.spec.whatwg.org/#dom-document-getelementsbytagname>

Your URI might have worked before just as mine does now, but that is 
precisely the unreliable behavior that you can expect with a "Living 
Standard", a resource that does not remotely meet the criteria for a 
standard.

WHATWG HTML is not the normative resource; instead, it is 

<https://www.w3.org/TR/2015/REC-dom-20151119/#dom-document-getelementsbytagname>

as referred to by

<https://www.w3.org/TR/2016/REC-html51-20161101/infrastructure.html#common-dom-interfaces> pp.

Although in both cases the return value is specified as an object that 
implements the HTMLCollection interface, this is actually compatibly 
implemented only as an object implementing the NodeList interface.  By 
contrast to an HTMLCollection, using the bracket property accessor syntax 
with non-numeric string parameter, or calling the referred object’s 
namedItem() method with an argument of that form, on the return value, does 
not always yield useful results.

In any case, the problem with this approach is that one would have to 
iterate over a lot of irrelevant elements as not all elements can have 
values.  If the question is understood literally, then “value” means the 
“value” attribute, and not all elements have it.

In order to avoid this, there are several alternatives, including:

- calling document.getElementsByTagName() with a specific element type name 
  as argument, maybe several times, and if necessary, aggregate the results
  in an array;

- calling document.querySelectorAll() as provided by implementing the 
  Selectors API with a CSS selector that includes all the relevant element
  type names;

- calling document.evaluate() as provided by implementing DOM Level 3 XPath
  to retrieve references to the relevant element objects and/or their
  “values” directly (according to MDN, supported by all major browsers 
  except Internet Explorer).

However, the OP appears to have an X–Y problem; they appear to have the 
misconception that they need to retrieve the values of all elements to 
achieve their goal.  That is not so.

For example, one can determine which elements the user has added by 
observing mutations to the document tree:

<https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver>

Also, the original code is invalid HTML, and if that is corrected, it will 
still not work as the function is being referred to, but not called.

-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#31722

Fromjustaguy <lichunshen84@gmail.com>
Date2016-11-14 12:48 -0800
Message-ID<00a7d52d-bd56-4582-a162-9225f8fe2630@googlegroups.com>
In reply to#31719
On Monday, November 14, 2016 at 11:26:17 AM UTC-5, Thomas 'PointedEars' Lahn wrote:
> Martin Honnen wrote:
> 
> > On 13.11.2016 19:01, justaguy wrote:
> >> Now, how do I reference / retrieve all the elements and associated values
> >> if any for this document?
> > 
> > Well, the
> >    document
> > object contains all elements and associated values. It is not clear in
> > which form you want to "retrieve" the elements or values.
> > 
> >> document.all was for old IE browser only, hence, irrelevant for other
> >> modern browsers.
> > 
> > document.getElementsByTagName('*') gives you all elements as an
> > HTMLCollection , see
> > https://dom.spec.whatwg.org/#concept-getelementsbytagname/
> 
> This URI does not work here inasfar as that it does not navigate to the 
> section in question.  The URI that does it is currently
> 
> <https://dom.spec.whatwg.org/#dom-document-getelementsbytagname>
> 
> Your URI might have worked before just as mine does now, but that is 
> precisely the unreliable behavior that you can expect with a "Living 
> Standard", a resource that does not remotely meet the criteria for a 
> standard.
> 
> WHATWG HTML is not the normative resource; instead, it is 
> 
> <https://www.w3.org/TR/2015/REC-dom-20151119/#dom-document-getelementsbytagname>
> 
> as referred to by
> 
> <https://www.w3.org/TR/2016/REC-html51-20161101/infrastructure.html#common-dom-interfaces> pp.
> 
> Although in both cases the return value is specified as an object that 
> implements the HTMLCollection interface, this is actually compatibly 
> implemented only as an object implementing the NodeList interface.  By 
> contrast to an HTMLCollection, using the bracket property accessor syntax 
> with non-numeric string parameter, or calling the referred object’s 
> namedItem() method with an argument of that form, on the return value, does 
> not always yield useful results.
> 
> In any case, the problem with this approach is that one would have to 
> iterate over a lot of irrelevant elements as not all elements can have 
> values.  If the question is understood literally, then “value” means the 
> “value” attribute, and not all elements have it.
> 
> In order to avoid this, there are several alternatives, including:
> 
> - calling document.getElementsByTagName() with a specific element type name 
>   as argument, maybe several times, and if necessary, aggregate the results
>   in an array;
> 
> - calling document.querySelectorAll() as provided by implementing the 
>   Selectors API with a CSS selector that includes all the relevant element
>   type names;
> 
> - calling document.evaluate() as provided by implementing DOM Level 3 XPath
>   to retrieve references to the relevant element objects and/or their
>   “values” directly (according to MDN, supported by all major browsers 
>   except Internet Explorer).
> 
> However, the OP appears to have an X–Y problem; they appear to have the 
> misconception that they need to retrieve the values of all elements to 
> achieve their goal.  That is not so.
> 
> For example, one can determine which elements the user has added by 
> observing mutations to the document tree:
> 
> <https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver>
> 
> Also, the original code is invalid HTML, and if that is corrected, it will 
> still not work as the function is being referred to, but not called.
> 

Martin Honnen's solution (document.getElementsByTagName('*')) works fine with me, thank you all.

[toc] | [prev] | [next] | [standalone]


#31715

FromJJ <jj4public@vfemail.net>
Date2016-11-14 18:51 +0700
Message-ID<azkl7evdnezq.lnnuo8ae1v0t$.dlg@40tude.net>
In reply to#31713
On Sun, 13 Nov 2016 10:01:23 -0800 (PST), justaguy wrote:
> Start:
> <html>
> <head>
>   <script>
>      var addEle = function() {
>          var newEl = document.createElement('span')';
>              document.body.appendChild(newEl);
>          // other types of elements addition as well, ie. input
>      }
>   </script>
> </head>
> <body>
>   <button onclick="addEle">Add Element</button>
> 
> </body>
> </html>
> 
> Process:
> A user adds some elements to the page (document).
> 
> Question:
> Now, how do I reference / retrieve all the elements and associated values if any for this document?
> 
> document.all was for old IE browser only, hence, irrelevant for other modern browsers.
> 
> Thanks.

Use MutationObserver.

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.javascript


csiph-web