GithubHelp home page GithubHelp logo

Comments (2)

greyelf avatar greyelf commented on August 10, 2024

This means they cannot be used to target elements that may not be present, unlike their equivalent jQuery functions.

While I don't disagree with having a configuration setting that the Author can use to disable the DOM macro's default behaviour, I do think it's important to point out one major difference between the macro's and the jQuery element search functions.

And that is that the functions return an Array of elements that met the criteria. whose length can be checked to determine if the search failed. Where as the macros themselves don't allow the Author the same type of check, thus the need for an error message.

from sugarcube-2.

MalifaciousGames avatar MalifaciousGames commented on August 10, 2024

Yes, I agree that there is a strong argument for the warning error being the default, just that a "don't warn me" mode would greatly expand the macros usefulness.

I remember using this back in the day:

<<if $(selector).length>>
<<addclass 'selector' 'class'>>
<</if>>

Which fetches the selected items twice and offers no benefit over the simple <<run $(selector).addClass('class')>>. And this assumes the end user even knows about checking for $(selector).length.

Separate but related issue:

I assume most no elements matched the selector errors arise from trying to affect elements in a passage that isn't yet loaded. In which case the error is still very hard to diagnose for novice coders.
I see two possible solutions:

  • Queue DOM changes that happen during rendering until :passagedisplay (most user-friendly, might be very problematic when it comes to timing).
  • Provide a more verbose error message if no elements are found during rendering, something like The desired element(s) is likely not yet in DOM, you should try delaying the macro call with <<done>>.

from sugarcube-2.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.