Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.09.2011, 11:09
Новичок на форуме
Отправить личное сообщение для pods Посмотреть профиль Найти все сообщения от pods
 
Регистрация: 06.01.2010
Сообщений: 8

Подскажите как заставить искать getElementById в любом регистре ?
а то изменят одну буквы на большую и не чего не работает.
Ответить с цитированием
  #2 (permalink)  
Старый 20.09.2011, 11:15
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А зачем менять буквы? Большая и маленькая -- разные буквы, не надо их менять.
Ответить с цитированием
  #3 (permalink)  
Старый 20.09.2011, 12:46
Новичок на форуме
Отправить личное сообщение для pods Посмотреть профиль Найти все сообщения от pods
 
Регистрация: 06.01.2010
Сообщений: 8

это не моё условие
Ответить с цитированием
  #4 (permalink)  
Старый 20.09.2011, 13:09
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

Бред какой то, но если очень надо, то можно так )))

<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>
Ответить с цитированием
  #5 (permalink)  
Старый 20.09.2011, 13:14
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,234

Сообщение от pods
это не моё условие
Ну, так объясни им что они не правы.
Ответить с цитированием
  #6 (permalink)  
Старый 20.09.2011, 13:52
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Триви, 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>


Сообщение от Gvozd Посмотреть сообщение
Ну, так объясни им что они не правы.
помните тему про рабов-программистов, которые начальству возразить не могут ?
Ответить с цитированием
  #7 (permalink)  
Старый 20.09.2011, 14:29
Профессор
Отправить личное сообщение для Триви Посмотреть профиль Найти все сообщения от Триви
 
Регистрация: 23.04.2010
Сообщений: 354

Сообщение от melky Посмотреть сообщение
Триви, WTF ?
Ну я так как Вы исчо не умею
Просто в качестве идеи предложил перевести все айди в нижний регистр
Ответить с цитированием
  #8 (permalink)  
Старый 20.09.2011, 15:21
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

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;
}
Ответить с цитированием
  #9 (permalink)  
Старый 20.09.2011, 17:06
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

я тоже изменю его


// коллекцию не придумал,как заменить.
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, 20.09.2011 в 17:25.
Ответить с цитированием
  #10 (permalink)  
Старый 20.09.2011, 17:19
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

melky,
у меня было одно лишнее действее для ортимизации
var element = document.getElementById(id)

если есть элемент вернем его, и не будем бегать по циклу)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как отобразить текст. potkin Общие вопросы Javascript 17 26.10.2017 16:09
подскажите, как сделать индикатор «до начала загрузки страницы»? SergAG Элементы интерфейса 7 31.05.2011 19:53
Подскажите, как реализовать добавление текста в положение курсора textarea ArmagedDance Events/DOM/Window 2 13.05.2011 22:32
Подскажите как убрать часть текста при нажатии на кномпу или гиперссылку. potkin Общие вопросы Javascript 6 10.10.2008 07:55
Подскажите как при помощи JS hta в трею свернуть kimboo Общие вопросы Javascript 4 11.07.2008 16:00