簡體   English   中英

如何為所有jQuery選擇器插入前綴?

[英]How can I insert a prefix for all jQuery selectors?

我需要擴展的主要jQuery函數在將任何選擇器傳遞給它之前插入前綴。

例如

jQuery.prefix = '#newBody ';
jQuery('.content')

將與

jQuery('#newBody .content')

我嘗試運行此代碼

window.oldJquery = jQuery;
window.jQuery = window.$ = function( selector, context) {
    console.log('+',selector);
    return oldJquery(selector, context );
}

但是我最后一個jQuery對象。

**

當前代碼無變化

**

我不知道jQuery中的功能,但是您可以使用find

jQuery('#newBody').find('.content')

您可以將其包裝在一個函數中,然后也調用該函數:

function my$(selector) {
  return jQuery('#newBody').find(selector);
}

用法:

my$('.content');

我建議創建一個包裝方法。 只需創建一個接受選擇器的小方法,然后將前綴和選擇器傳遞給jQuery並返回結果。

例:

var prefix = '#newBody';

function jqPrefix(selector)
{
  return jQuery(prefix + ' ' + selector);
}

然后,您將調用jqPrefix('.content')而不是jQuery('.content')

您可以通過幾種方式來做到這一點而不會造成破壞(如您目前所想)。 一種方式如下所示:

var $prefix = jQuery('#newBody');
$prefix.find('.content');

另一種方式,可能會消耗更多的資源,但仍會保持無損,如下所示。

var $Prefix = function(selectors) {
    return jQuery("#newBody " + selectors);
};

$Prefix(".content"); //jQuery("#newBody .content");

編輯:如果要替換所有jQuery ,以便它們只是特定元素的子代,則可以嘗試以下操作。 本質上,我們正在做的是創建一個新的作用域,並將jQuery變量重新定義為$Prefix (來自上一個代碼片段),因此您無需重寫所有內容。

var $Prefix = function(selectors) {
    return jQuery("#newBody " + selectors);
};

(function(jQuery){

}($Prefix));

應該做的就是更新代碼。 您可以使用正則表達式進行查找/替換,如下所示:

find: /\$\('(.*?)'\)/ig
replace: $('#newSelector \1') OR $('\1', '#newSelector')

兩者都會為您的搜索提供正確的上下文。

您可以使用$ .extend

$.extend($.expr['#'],{
    newBody: function(a) {
        return true;
    }
});

參見示例

最簡單,最安全和...好吧,聰明的方法是使用包裝器實現所需的功能,而不是覆蓋jQuery。
如其他答案所述,您可以制作一個將前綴添加到當前選擇器的包裝器(例如jqPrefix ),或者可以為選擇器本身制作一個包裝器:

var $$ = getSelector = function(){
    return '#id ' + s;
};

而不是將thet選擇器作為簡單字符串傳遞給jQuery,您可以傳遞以選擇器作為第一個參數的getSelector函數調用:

$($$('.some-class'))

轉化為

$('#id .some-class')

我在一兩周前遇到過同樣的問題。 原來我的工作很乏味,但效果很好。 驗證它是否正確很容易。

將有如下代碼:

$(something)...

您可能使用了jQuery而不是$。 無論哪種方式,您都必須搜索它。 沒辦法。 如果您修改jQuery本身,則可以使其正常工作。 JavascriptMVC是在其Controller中完成的。 我懷疑他們花了很長時間調試並驗證它是否有效並且沒有破壞任何東西。

首先將這樣的代碼放在某個地方:

var $prefix = $('#newBody ');

在找到它的每個位置,將其替換為以下代碼:

$(something, $prefix)...

請注意,您所做的只是在編輯器中插入或粘貼文本,這非常快,尤其是當您的編輯器能夠搜索結束括號並將光標留在其前面時。 在Eclipse中,可以將搜索和替換字符串與正則表達式一起使用。 它們就是這些(替換字符串中的逗號后有空格)。

(\$\([^\)]+)\)
\1, \$prefix\)

請注意,在內部(在最新的jQuery版本中)這完全像:

$prefix.find(something)...

它對我有用,我重復一遍,調試起來不是很困難。 另外,它沒有弄亂任何其他jQuery調用。

這個StackOverflow問題中有一些關於這種形式的jQuery選擇器的評論

暫無
暫無

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

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