2013-07-28 2 views
3

Каков наилучший способ найти все элементы со страницы, которые соответствуют размеру, который мне нужен, и меньше перегрузки браузера?Лучший способ пересечения элементов dom с условием?

Самое главное - сделать так, чтобы браузер не перегружал и не разбивался, если на странице много элементов.

то, что я использую сейчас:

elements = document.getElementsByTagName("*"); 
len = elements.length; 
for(var i = 0; i < len; i++) 
    if(elements[i].clientHeight == MyHeight && elements[i].clientWidth == MyWidth) 
{ /*my code*/ } 

Пожалуйста, если кто-нибудь знает лучший способ, который не подчеркнуть браузер столько, сколько то, что я использую в настоящее время, то это то, что мне нужно ,

+0

осуществляется работа ?? –

+0

@MESSIAH, что вы имеете в виду? – ManY

+0

Я имею в виду, вы просто спрашиваете о лучшей практике или ваш код не работает? –

ответ

1

Если у вас есть , необходимо сделать это, было бы более эффективно повторять рекурсивно через дерево, потому что тогда, когда вы нажмете на элемент, который меньше, чем вам нужно, вы ничего не знаете внутри него. требуемый размер. По-прежнему кажется, что в большинстве случаев будет лучшее решение, но я не знаю вашей конкретной проблемы.

EDIT:

Это работает.

function findElements(width, height, element){ 
    var results = Array(); 

    for(var i=0; i<element.childNodes.length; i+=1){ 
     var childElement = element.childNodes[i]; 

     if(childElement.clientWidth == width && childElement.clientHeight == height){ 
      results.push(childElement); 
      results = results.concat(findElements(width, height, childElement)); 

     } else if(childElement.clientWidth < width || childElement.clientHeight < height){ 
      continue; 

     } else { 
      results = results.concat(findElements(width, height, childElement)); 
     } 
    } 

    return results; 
} 

findElements(myWidth, myHeight, document); 
+0

Мне нравится ваше предложение, кажется полезным. Пожалуйста, покажите мне свой пример кода. Я хотел бы выполнить итерацию по дереву и проверить родительский элемент, если его размер больше или меньше, и продолжать, только если он больше, потому что таким образом я буду перебирать только несколько элементов, а не все лишнее. Я не очень хорошо разбираюсь в javascript, пожалуйста, покажите мне свой пример кода. спасибо +1 – ManY

+0

после тестирования вашего кода в консоли он разбил страницу – ManY

+0

Я сказал, что это пример кода, который даст вам представление. Я не собираюсь писать это для вас, но вы совсем близко. –

1

Я думаю, что речь идет о скорости здесь (хотя разница является предельной).

Who is the fastest??? -> нажмите кнопку запуска и протестируйте ее самостоятельно!

Я думаю, document.body.querySelectorAll("*"); является явным победителем.

var items = document.body.querySelectorAll("*"); 
    var target, i, len = items.length; 
    for (i=0;i<len;i++) { 
     target=items[i]; 
if(//your condition) 
    { and the code} 

Winner!!!

** Вывод: ** Просто написать код, понятные, легко читаемый и elegant.I думать понимания логики является наиболее тривиальной частью.

UPDATE:

function findParentNode() { 

    var testObj = document.body.querySelectorAll("*");; 
    for(var i=0;i<=testObj.length;i++){ 
     if(testobj.offsetWidth=="your width" && testobj.offsetHeight=="your height"){ 
      //push it in an array or do whatever you wanted to do 
      } 
    else{ 
    //no elements found!!! 
    } 
    } 
} 
+0

Тело Javascript (TagName) 707 ± 2.04% быстрый, это означает, что мой образец кода вопроса является самым быстрым, чем ваш. Я просто следил за вашей ссылкой и вставлял результаты. – ManY

+0

Можете ли вы дать мне ссылку ... я уточню свой ответ !!! –

+0

и это также зависит от содержания. .. вы заменяете содержимое? –

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