From 4f70e5a9e69b31a5924893a7892bdf7ab9ea94cc Mon Sep 17 00:00:00 2001 From: MasterKia Date: Thu, 8 Dec 2022 13:16:09 +0330 Subject: [PATCH] introduce :matches-attr(), :has-text() supports empty string --- Procedural-cosmetic-filters.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/Procedural-cosmetic-filters.md b/Procedural-cosmetic-filters.md index 7a82885..802d20d 100644 --- a/Procedural-cosmetic-filters.md +++ b/Procedural-cosmetic-filters.md @@ -53,12 +53,14 @@ The `:has(arg)` operator is actually a planned pseudo-class in CSS4, but as of w - Chainable: Yes. - _subject_: Can be a plain CSS selector, or a procedural cosmetic filter. - _needle_: The literal text which must be found, or a literal regular expression. If using a literal regular expression, you can optionally use the `i` and/or `m` flags (version 1.15). +It is possible to have `:has-text()` match the +empty string by just quoting the empty string ([new in 1.45.3b10](https://github.com/gorhill/uBlock/commit/76d70102f069856bffac7cd27dc40500c3bb9563)): +`##foo:has-text("")` - Examples: - `example.com##body > div:last-of-type span:has-text(/^Promoted by/)`: starts with "Promoted by" - `example.com##body > div:last-of-type span:has-text(/^Promoted by/i)`: starts with "Promoted by", ignore case - `example.com##body > div:last-of-type span:has-text(Promoted by)`: contains "Promoted by" at any position - *** ### `subject:matches-css(arg)` @@ -217,6 +219,32 @@ By default hiding by procedural filters is reevaluated only when nodes in sub-tr *** +### `subject:matches-attr(arg)` + +- Description: Allows to select an element by its attributes, especially if they are randomized. +- Chainable: Yes. +- _subject_: Can be a plain CSS selector, or a procedural cosmetic filter. +- _arg_: A declaration in the form `name="value"` or `"name"="value"`, where `name` is attribute name and `value` is attribute value (optional), `name` and `value` can be literal text or literal regular expression. + +Introduced in uBO [1.45.3b10](https://github.com/gorhill/uBlock/commit/76d70102f069856bffac7cd27dc40500c3bb9563) + +Solves [uBlockOrigin/uBlock-issues#2329 (comment)](https://github.com/uBlockOrigin/uBlock-issues/issues/2329#issue-1412857923) (randomly generated attributes). + +The supported syntax is exactly as per AdGuard's documentation: +- https://kb.adguard.com/en/general/how-to-create-your-own-ad-filters#extended-css-matches-attr + +Though recommended, the quotes are not mandatory in uBO if +the argument does not cause the parser to fail and if there +are no ambiguities. + +- Examples: + - `k-rauta.fi##button:matches-attr(class="/[\w]{7}/")` + - `k-rauta.fi##button:matches-attr("class"="/[\w]{7}/")` + +on `https://www.k-rauta.fi/tuote/valmistasoite-hole-in-1-250ml/6408070100905` + +*** + ### `subject:xpath(arg)` - Description: Create a new set of elements by evaluating an [XPath expression](https://developer.mozilla.org/en-US/docs/Web/XPath) using _subject_ as the context node (optional) and _arg_ as the expression.