Подскажите как заставить искать getElementById в любом регистре ?
а то изменят одну буквы на большую и не чего не работает.
|
А зачем менять буквы? Большая и маленькая -- разные буквы, не надо их менять.
|
это не моё условие
|
Бред какой то, но если очень надо, то можно так )))
<script type="text/javascript">
window.onload = function() {
var allTags = document.body.getElementsByTagName('*');
for (var i=0; i<allTags.length; i++) {
alert(allTags[i].id.toLowerCase());
}
}
</script>
<body>
<div id='idlowercase'></div>
<span id='IDUPPERCASE'></span>
<p id='idMixedCase'></p>
</body>
|
Цитата:
|
Триви, WTF ?
раз хотят они через жопу, пусть так и будет....
// кешируем тяжелые операции.
// loop вынесена и может быть заменена, например, jQuery.each
var all = document.getElementsByTagName("*"), loop = Array.prototype.every;
function getElementByIdWithoutCase( id ) {
var element, idReg = new RegExp( id, "i" );
// обходим все элементы и сравниваем их ИД без учета регистра.
loop.call( all, function(el){
// если есть ID и он соотв. указанному без учёта регистра
// то устанавливаем элемент и прекращаем цикл (return false)
return !(el.id && idReg.test( el.id) && (element=el));
});
return element;
}
пример :
<body>
<div id='idlowercase'></div>
<span id='IDUPPERCASE'></span>
<p id='idMixedCase'></p>
</body>
<script type="text/javascript">
var all = document.getElementsByTagName("*"), loop = Array.prototype.every;
function getElementByIdWithoutCase( id ) {
var element, idReg = new RegExp( id, "i" );
loop.call( all, function(el){
return !(el.id && idReg.test( el.id) && (element=el));
});
return element;
}
// func end. it's test.
var res = [];
[ 'idlowercase', 'IDUPPERCASE', 'idMixedCase' ].forEach(function(a,b){res.push((b=getElementByIdWithoutCase(a)).tagName+"#"+b.id)})
alert( res.join('\n') )
</script>
Цитата:
|
Цитата:
Просто в качестве идеи предложил перевести все айди в нижний регистр :D |
melky,
позволил себе добавить несколько оптимизаций к вашему коду
// кешируем тяжелые операции.
// loop вынесена и может быть заменена, например, jQuery.each
var all = document.querySelectorAll ? document.querySelectorAll("[id]") : document.getElementsByTagName("*"),
loop = Array.prototype.every;
function getElementByIdWithoutCase( id ) {
var element = document.getElementById(id), idReg = new RegExp( id, "i" );
// обходим все элементы и сравниваем их ИД без учета регистра.
!element && loop.call( all, function(el){
// если есть ID и он соотв. указанному без учёта регистра
// то устанавливаем элемент и прекращаем цикл (return false)
return !(el.id && idReg.test( el.id) && (element=el));
});
return element;
}
|
я тоже изменю его :)
// коллекцию не придумал,как заменить.
var all=document.querySelectorAll?document.querySelectorAll("[id]"):document.getElementsByTagName("*");
function getElementByIdWithoutCase( id ) {
if( document.getElementById(id) ) return document.getElementById(id);
var idReg = new RegExp( id, "i" ), i=0;
/*
пока не пройдем все элементы
или не найдём интересующий
*/
while( all[i] && !idReg.test( all[i].id) ) i+=1;
// т.к. цикл истанавливается на первом совпадении,
// то тут будет интересующий нас элемент
return all[i];
}
таким образом можно уменьшить количество кода и уйти от использования функции loop. ЗЫ использовал присваивание заместо пост-инкремента, потому что присваивание быстрее на муравьиную долю. мелочь, а приятно :)
<body>
<div id='idlowercase'></div>
<span id='IDUPPERCASE'></span>
<p id='idMixedCase'></p>
</body>
<script type="text/javascript">
var all=document.querySelectorAll?document.querySelectorAll("[id]"):document.getElementsByTagName("*");
function getElementByIdWithoutCase( id ) {
if( document.getElementById(id) ) return document.getElementById(id);
var idReg = new RegExp( id, "i" ),i=0;
while( all[i] && !idReg.test( all[i].id) ) i+=1;
return all[i];
}
// func end. it's test.
var res = [],b;
res.push((b=getElementByIdWithoutCase('idlowercase')).tagName+"#"+b.id)
res.push((b=getElementByIdWithoutCase('IDUPPERCASE')).tagName+"#"+b.id)
res.push((b=getElementByIdWithoutCase('idMixedCase')).tagName+"#"+b.id)
alert( res.join('\n') )
</script>
|
melky,
у меня было одно лишнее действее для ортимизации var element = document.getElementById(id) если есть элемент вернем его, и не будем бегать по циклу) |
| Часовой пояс GMT +3, время: 08:05. |