Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MutationObserver: new value in the format of `oldValue`

I'm using a MutationObserver and I'd like to access the new value of the attibute. I try this:

newValue = mutation.target[mutation.attributeName]

However, if for example mutation.attributeName == 'style', then mutation.oldValue and my newValue are formatted differently: mutation.oldValue is a string formatted like newValue.cssText, whereas newValue itself is a CSSStyleDeclaration object.

I would like to avoid programming for each possible mutation.attributeName things like "if 'style', use .cssText, if ..., use ...". There are too many possible attributes.

How do I get the new value in the format of oldValue?


Related questions don't answer my question:

  • mutation["addedNodes"][0] from here is undefined in my case.
  • This answer requires the element to have an ID. That might be difficult to achieve in some cases.

Edit:

  • This answer suggests newValue = mutation.target.attributes.getNamedItem(mutation.attributeName), but that has a different format than mutation.oldValue as well. For details, see here.
like image 606
root Avatar asked Oct 16 '25 04:10

root


1 Answers

Attributes and properties are different things. To get the attribute string, you'd use getAttribute:

newValue = mutation.target.getAttribute(mutation.attributeName);

You were accessing the property from the element instance, which in the case of style is a CSSStyleDeclaration object reflecting the parsed style properties from the style attribute. While many attributes are reflected directly as properties (id, name), others are in a different form (like style) or aren't available as properties on the element at all.

like image 68
T.J. Crowder Avatar answered Oct 17 '25 16:10

T.J. Crowder



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!