使用查找以忽略大小写的多个选择器开始
Using find starts with multiple selector ignoring case
我正在使用 JQuery 1.10.2,我试图找到所有以多重选择器开头的 link,我确信它可以被优化,但我没有不知道怎么办。
选择器必须 return 所有以这些 url 开头的 link :
/GalleryDetail.aspx
/gallerydetail.aspx
GalleryDetail.aspx
gallerydetail.aspx
/sketchbook.aspx
/SketchBook.aspx
SketchBook.aspx
sketchbook.aspx
此刻,我正在使用这个:
valNow.find("a[href^='/GalleryDetail.aspx'], a[href^='/gallerydetail.aspx'], a[href^='GalleryDetail.aspx'], a[href^='gallerydetail.aspx'],
a[href^='/sketchbook.aspx'], a[href^='/SketchBook.aspx'],
a[href^='sketchbook.aspx'], a[href^='SketchBook.aspx']");
我搜索了一下,读到我可以使用过滤器,但由于这是多重选择器,我什至不知道从哪里开始。而且我想我可以用它来做 ignorecase。
valNow.find("a[href^='/[gG]allery[dD]etail.aspx']")
但不知何故 return link。
如有任何帮助,我们将不胜感激
Array.prototype.filter
(and Array.prototype.some
)
的可能解决方案
$("a").filter((_, el) => {
var startsWith = ["/gall", "sketch"], // values to look for
href = (el.getAttribute("href") || "").toLowerCase(); // the href value as defined in the markup
return startsWith.some((val) => href.indexOf(val) == 0); // returns true if the current elements (<el>) href attribute starts with (== 0) any of the values in <startsWith>
// return startsWith.some((val) => href.indexOf(val) == 0 || href.indexOf("/" + val) == 0)
})
.addClass("foo");
.foo { background-color: yellow }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="/GalleryDetail.aspx">/GalleryDetail.aspx</a>
<a href="/gallerydetail.aspx">/gallerydetail.aspx</a>
<a href="GalleryDetail.aspx">GalleryDetail.aspx</a>
<a href="gallerydetail.aspx">gallerydetail.aspx</a>
<a href="/SketchBook.aspx">/SketchBook.aspx</a>
<a href="/sketchbook.aspx">/sketchbook.aspx</a>
<a href="SketchBook.aspx">SketchBook.aspx</a>
<a href="sketchbook.aspx">sketchbook.aspx</a>
我正在使用 JQuery 1.10.2,我试图找到所有以多重选择器开头的 link,我确信它可以被优化,但我没有不知道怎么办。
选择器必须 return 所有以这些 url 开头的 link :
/GalleryDetail.aspx
/gallerydetail.aspx
GalleryDetail.aspx
gallerydetail.aspx
/sketchbook.aspx
/SketchBook.aspx
SketchBook.aspx
sketchbook.aspx
此刻,我正在使用这个:
valNow.find("a[href^='/GalleryDetail.aspx'], a[href^='/gallerydetail.aspx'], a[href^='GalleryDetail.aspx'], a[href^='gallerydetail.aspx'],
a[href^='/sketchbook.aspx'], a[href^='/SketchBook.aspx'],
a[href^='sketchbook.aspx'], a[href^='SketchBook.aspx']");
我搜索了一下,读到我可以使用过滤器,但由于这是多重选择器,我什至不知道从哪里开始。而且我想我可以用它来做 ignorecase。
valNow.find("a[href^='/[gG]allery[dD]etail.aspx']")
但不知何故 return link。
如有任何帮助,我们将不胜感激
Array.prototype.filter
(and Array.prototype.some
)
$("a").filter((_, el) => {
var startsWith = ["/gall", "sketch"], // values to look for
href = (el.getAttribute("href") || "").toLowerCase(); // the href value as defined in the markup
return startsWith.some((val) => href.indexOf(val) == 0); // returns true if the current elements (<el>) href attribute starts with (== 0) any of the values in <startsWith>
// return startsWith.some((val) => href.indexOf(val) == 0 || href.indexOf("/" + val) == 0)
})
.addClass("foo");
.foo { background-color: yellow }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="/GalleryDetail.aspx">/GalleryDetail.aspx</a>
<a href="/gallerydetail.aspx">/gallerydetail.aspx</a>
<a href="GalleryDetail.aspx">GalleryDetail.aspx</a>
<a href="gallerydetail.aspx">gallerydetail.aspx</a>
<a href="/SketchBook.aspx">/SketchBook.aspx</a>
<a href="/sketchbook.aspx">/sketchbook.aspx</a>
<a href="SketchBook.aspx">SketchBook.aspx</a>
<a href="sketchbook.aspx">sketchbook.aspx</a>