簡體   English   中英

jQuery屬性選擇器:[x = y]或[x = z]

[英]jQuery attribute selector: [x=y] or [x=z]

我有以下jQuery選擇器:

$("a[href^='http://'],a[href^='https://']");

是否可以更改此設置,以便我不需要指定a[href^=兩次?

例如,類似於:

$("a[href^='http://'||'https://']");

編輯:我的httphttps例子不應該按字面意思。 我可能正在尋找以yz開頭的值。

如果你願意使用第二個函數調用,那很簡單:

$('a').filter('[href^="http://"],[href^="https://"]');

或者使用令牌:

var startsWith = ['http://', 'https://'];
$('a').filter(function () {
    var i;
    for (i = 0; i < startsWith.length; i++) {
        if ($(this).is('[href^="' + startsWith[i] + '"]')) {
            return true;
        }
    }
    return false;
});

或者使用自定義表達式:

$.expr[':']​​​​​​.hrefStartsWith = function (ele, i, info) {
    var tokens;
    tokens = info[3].split(',');
    for (i = 0; i < tokens.length; i++) {
        if ($(ele).is('[href^="' + tokens[i] + '"]')) {
            return true;
        }
    }
    return false;
};

哪個用作:

$('a:hrefStartsWith(http://,https://)')

小提琴http//jsfiddle.net/X8CYQ/


你應該可以使用這樣的東西:

$.expr[':'].exturl = function(obj) {
   return (/^https?:\/\//i).test($(obj).attr("href"));
}

然后像這樣使用選擇器:

$("a:exturl")

HTML

<a href="http://www.google.com">External link #1</a><br />
<a href="ftp://www.donotinclude.dk">No match link #1</a><br />
<a href="?nope">No match link #2</a><br />
<a href="https://www.google.dk">External link #2</a><br />
<a href="http://www.google.se">External link #3</a><br />
<a href="ssh://whywouldyouevendothis">No match link #3</a><br />
<a href="https://www.google.co.uk">External link #4</a><br />
<a href="http://www.facebook.com">External link #5</a><br />
<a href="/index.html">No match link #4</a><br />
<a href="https://www.facebook.com">External link #6</a><br />​

JS

$.expr[':'].exturl = function(obj) {
    return (/^https?:\/\//i).test($(obj).attr("href"));
}
$(document).ready(function() {
    $("a:exturl").css("color", "red");
});​

你可以干脆做

$("a[href^='http']")

由於href^=僅表示“以...開頭”,除非您需要確定://也包括在內。

以下是其他屬性和值的示例:

http://jsbin.com/owehow/2/edit

默認情況下,您無法在jQuery中執行此操作。它對選擇器沒有任何“或”條件(逗號除外,排序,這是您要避免的)。

如果您想要創建自定義過濾器,可以:

http://jsfiddle.net/yJZDg/

除非你需要做很多這樣的事情,否則這是非常矯枉過正的。 該示例也僅適用於完全匹配。 你必須調整“開始時”或其他類型的匹配,但這個想法就在那里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM