问题
I ran across some JS code using the following to select the first of multiple nodes.
querySelectorAll()[0]
Isn't the following doing the exact same thing?
querySelector()
Is there an advantage of using querySelectorAll()[0]
?
回答1:
Both expressions will return the exact same result.
The only difference is the querySelectorAll()[0]
will first find all the items that match the selector and then index the first item. Whereas querySelector()
will "short circuit" once it finds the first element.
So, theoretically, querySelector()
might be marginally more efficient than querySelectorAll()[0]
. However, their behaviour is identical.
回答2:
They both result in the same thing, but they take different routes (literally and figuratively) to get there. In your example, .querySelector()
is the correct approach because .querySelectorAll()
will incur more of a performance hit by scanning the entire element that the method is called on when it only needs to use the first match.
The advantage to .querySelectorAll()
is that you can cache a reference to the entire set of matched elements and then index them or loop them as needed later. So, if there was a need for the first matched element, but the entire set was going to be needed somewhere else in the code, then .querySelectorAll(<<selector>>)[0]
would make sense.
来源:https://stackoverflow.com/questions/46868388/difference-between-queryselector-and-queryselectorall0