2016-07-06 2 views
0

Есть ли способ заменить $ чем-то вроде $_sub, действия которого содержатся в div? Например, я хочу, чтобы придать $_sub функцию и вместо того, чтобы использовать $, функция использует $_sub для ограничения его объема в пределах div, сохраняя при этом методы, которые могут быть вызваны на $ (например, я должен быть в состоянии сделать $_sub.ajax())Принуждение jQuery, чтобы ограничить его область до некоторого div

<a href="#">Outside </a> 
<div id="contents" > 
    <a href="#">Inside </a> 
</div> 

function modify($_sub) { 
    var inner_a = $_sub("a"); //should return only the inner <a> 
} 

context не будет работать для меня в этом сценарии. Я хочу, чтобы функция мыслила $_sub как $. Я могу изменить подпись функции, чтобы переименовать $_sub в $, чтобы функция даже не знала, что она использует ограниченную версию области действительного $.

+1

создайте такой способ, чтобы ограничить область охвата селектором вместо jquery, поскольку он загружает и работает на всей DOM не на определенном узле в дереве DOM. – Sabarish

+0

Просто передайте контекст в качестве второго параметра ... http://stackoverflow.com/questions/16422478/what-is-context-in-jquery-selector – CBroe

+1

'$ _sub = $' wil скопировать ссылку jquery на новую переменная. но его область охвата не будет просто привязана к тому, к какому элементу доступа он может получить доступ. Почему вы не ограничиваете область в родительских базах в селекторе юр? что вы пытаетесь выполнить – Bsienn

ответ

2

Использование context: jQuery(selector [, context ])

Просто пройти второй параметр.

В вашем примере это будет: var inner_a = $("a", "#contents") что эквивалентно $("#contents").find("a")

What is "context" in jQuery selector?

+0

контекст не будет работать для меня в этом сценарии. Я хочу, чтобы функция думала, что $ _sub так же, как $. Я могу изменить подпись функции, чтобы переименовать $ _sub в $, чтобы функция даже не знала, что использует ограниченную версию области действительной $ – Vishnu

0

Опции контекста упоминается в других ответах кажется более вменяемым, но если вы действительно не можете использовать его, вы могли бы вместо карри функцию автоматического обеспечения контекста, а затем передать выделанной функцию в вашей ИЗМЕНЯЮТ функции:

var curry = function() { 
 
    var args = Array.prototype.slice.call(arguments); 
 
    var fn = args[0]; 
 
    var after = args.slice(1); 
 

 
    return function() { 
 
    return fn.apply(this, after.concat(
 
     Array.prototype.slice.call(arguments))); 
 
    }; 
 
};  
 

 
var _$_sub = function(context, sel) { 
 
    return $(context).find(sel); 
 
} 
 

 
var $_sub = curry(_$_sub, '#content'); 
 

 
function modify($$) { 
 
    var inner_a = $$("a"); 
 
    console.log(inner_a.text()); 
 
} 
 

 
modify($_sub);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="">Outside</a> 
 
<div id="content"> 
 
    <a href="">Inside</a> 
 
</div>

+0

, но функция curries возвращает элемент jquery, а не функцию jquery ($). Поэтому я не думаю, что вы можете вызывать методы на $$, которые обычно вызывают $ (например, $$. Ajax не будет работать) – Vishnu

Смежные вопросы