Показать сообщение отдельно
  #2 (permalink)  
Старый 01.02.2013, 07:55
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

1) Используйте document.getElementsByClassName метод. Для IE7-8 добавлен костыль.
2) break останавливает цикл. Поэтому ваш код обрабатывает только первый элемент
3) Раз мы уже выбрали элементы с классом info, то зачем еще одна проверка?
4) Перед i потеряли ключевое слово var, в итоге объявили ее как глобальную.

С учетом сказанного выше:

<html>
 
<head>
</head>
 
<body>
<div class="info">111</div>
<div class="info">222</div>
<div class="info">333</div>
<br>
<input type="button" value="search" onclick="search();">
 
<script>

if (!document.getElementsByClassName) {
  document.getElementsByClassName = function(search) {
    var d = document, elements, pattern, i, results = [];
    if (d.querySelectorAll) { // IE8
      return d.querySelectorAll("." + search);
    }
    if (d.evaluate) { // IE6, IE7
      pattern = ".//*[contains(concat(' ', @class, ' '), ' " + search + " ')]";
      elements = d.evaluate(pattern, d, null, 0, null);
      while ((i = elements.iterateNext())) {
        results.push(i);
      }
    } else {
      elements = d.getElementsByTagName("*");
      pattern = new RegExp("(^|\\s)" + search + "(\\s|$)");
      for (i = 0; i < elements.length; i++) {
        if ( pattern.test(elements[i].className) ) {
          results.push(elements[i]);
        }
      }
    }
    return results;
  }
}

function search() {
 
    var elements = document.getElementsByClassName('info');
    var contents = [];
    for (var i=0; i < elements.length; i++) {
        contents[i] = elements[i].innerText || elements[i].textContent || '';
    }
    var result = contents.join(' - ');
    
    alert( result );

}
</script>
</body>
 
</html>

Последний раз редактировалось danik.js, 01.02.2013 в 08:02.
Ответить с цитированием