Подскажите как заставить искать 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, время: 16:42. |