Я думаю, вы не понимаете, как должны работать селекторы jQuery.Вот как они работают.Предполагая, что вы выполняете запрос со следующим:
$("input:clientID(TextBox1)");
jQuery сначала находит все входные элементы, а затем для каждого спрашивает вашу функцию, следует ли ее включить или нет.Итак, если ваша страница содержит 10 input
элементов, то ваша функция будет вызываться 10 раз.
Вам не нужно запрашивать DOM самостоятельно .
При таком понимании вам станет намного проще решать, содержит ли идентификатор узла _TextBox1
или нет.
(function ($) {
$.expr[":"].clientID = function(objNode, intStackIndex, arrProperties, arrNodeStack) {
// we need to something to query
if( ! arrProperties[3] ) return false;
return objNode.id.indexOf( "_" + arrProperties[3] ) !== -1;
};
} (jQuery));
Я оставлю вам специфику ASP.net, поскольку я не знаком с тем, как генерируются клиентские идентификаторы ASP.net.Тем не менее, насколько я понимаю, вы также просто сможете достичь идентичной функциональности с помощью встроенных селекторов jQuery (как уже упоминали другие).
Редактирование - Поиск отформатированных идентификаторов ASP.net
Для выбораИдентификаторы, которые могут быть «xxx_xxx_clientID» или «clientID», код может быть изменен на:
var testID = arrProperties[3];
if( objNode.id == testID ) return true;
// ends with code
testID = "_" + testID;
var lastIndex = objNode.id.lastIndexOf(testID);
return lastIndex !== -1 && lastIndex == (objNode.id.length - testID.length);
Редактировать 2 - найти только первый соответствующий элемент
Чтобы соответствовать только первомуВ результате вы можете установить переменную-флаг, когда вы что-то нашли.Это должно быть намного быстрее, но менее чисто, чем использование решения Джеймса.
(function ($) {
// assign the clientID filter with a self-executing anonymous function
$.expr[":"].clientID = (function(){
// create a "private" flag variable
var alreadyFound = false;
return function(objNode, intStackIndex, arrProperties, arrNodeStack) {
if( intStackIndex === 0 ) alreadyFound = false;
if( alreadyFound ) return false;
var testID = arrProperties[3];
if( objNode.id == testID){
alreadyFound = true;
} else {
// ends with code
testID = "_" + testID;
var lastIndex = objNode.id.lastIndexOf(testID);
alreadyFound = lastIndex !== -1 && lastIndex == (objNode.id.length - testID.length);
}
return alreadyFound;
};
})();
} (jQuery));
Переменная alreadyFound
доступна нашей функции clientID (и никому другому) через замыкание.