Получить содержимое всех className!
Здравствуйте, подскажите пожалуйста как получить содержимое всех className и разделить их символом "-" ?
У меня находит только содержимое первого класса: <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> function search() { getElementsByClass = function(classList, node) { var node = node || document, list = node.getElementsByTagName('*'), length = list.length, classArray = classList.split(/\s+/), classes = classArray.length, result = [], i,j for(i = 0; i < length; i++) { for(j = 0; j < classes; j++) { if(list[i].className.search('\\b' + classArray[j] + '\\b') != -1) { result.push(list[i]) break } } } return result } var elements = getElementsByClass('info'); for (i=0; i < elements.length; i++) { if (elements[i].className == 'info') { alert(elements[i].textContent || elements[i].innerText || ""); break; } } } </script> </body> </html> В результате чтоб вышло примерно так: 111 - 222 - 333 |
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> |
Цитата:
|
lamer,
<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> function search() { getElementsByClass = function(classList, node) { var node = node || document, list = node.getElementsByTagName('*'), length = list.length, classArray = classList.split(/\s+/), classes = classArray.length, result = [], i,j for(i = 0; i < length; i++) { for(j = 0; j < classes; j++) { if(list[i].className.search('\\b' + classArray[j] + '\\b') != -1) { result.push(list[i]) break } } } return result } var elements = getElementsByClass('info'); for (i=0; i < elements.length; i++) { elements[i]=elements[i].textContent || elements[i].innerText || ""; } alert(elements.join(' - ')) } </script> </body> </html> |
рони, гениально! Совершенно иной подход, я даже догадаться не мог. Научишь? :dance:
|
danik.js,
Цитата:
|
Цитата:
(" " + list[i].className + " ").indexOf( " " + classArray[j] + " " ); интересно, что лучше ?) |
danik.js, спасибо я понял свою ошибку.
Встал вопрос, немного по другому, как записать чтоб в результате была выдача такая: 1 - 1 2 - 2 3 - 3 <html> <head> </head> <body> <div class="infoOne">1</div> <div class="infoTwo">1</div> <div class="infoOne">2</div> <div class="infoTwo">2</div> <div class="infoOne">3</div> <div class="infoTwo">3</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 infoOne = document.getElementsByClassName('infoOne'); var infoTwo = document.getElementsByClassName('infoTwo'); var contentsOne = []; var contentsTwo = []; for (var i=0; i < infoOne.length; i++) { contentsOne[i] = infoOne[i].innerText || infoOne[i].textContent || ''; } for (var i=0; i < infoTwo.length; i++) { contentsTwo[i] = infoTwo[i].innerText || infoTwo[i].textContent || ''; } var result = contentsOne.join(' - ') + '\n' + contentsTwo.join(' - '); alert( result ); } </script> </body> </html> |
function search() { var infoOne = document.getElementsByClassName('infoOne'); var infoTwo = document.getElementsByClassName('infoTwo'); var contents = []; for (var i=0; i < infoOne.length; i++) { contents[i] = [infoOne[i].innerText || infoOne[i].textContent || '', infoTwo[i].innerText || infoTwo[i].textContent || ''].join(' - '); } var result = contents.join('\n'); // для html - join('<br/>') alert( result ); } |
danik.js, спасибо очень помогли.
|
Часовой пояс GMT +3, время: 11:28. |