JS Prototype получить элемент по классу?
У меня есть следующий код, и я пытаюсь сопоставить его с классом, а не с идентификатором:
Html:
<div id='testdiv'>
<div class="lol">
[First Title|<a class="external" href="http://test.com">http://test.com</a>]
Another line
[Second Title|<a class="external" href="http://test.com">http://test.com</a>]
More text
[Third Title|<a class="external" href="http://test.com">http://test.com</a>]
</div>
</div>
Javascript:
var textContainer = document.getElementById("testdiv");
var linkText = textContainer.innerHTML;
var pattern = /[([^|]+)|([^>]+.?)[^<]*(</a>)]/g;
var result = linkText.replace(pattern, "$2$1$3");
textContainer.innerHTML = result;
Полный пример: http://jsfiddle.net/JFC72/17/
Как я могу сделать так, чтобы он соответствовал "myclass" вместо этого? Спасибо!
4 ответа:
Используйте CSS селектор в прототипе.
var textContainer = $$('div.myclass')[0];
Я думаю, что вам нужен метод
$$
. Он выбирает элементы DOM, соответствующие строгому селектору CSS. В этом случае вы хотитеvar elements = $$('.myclass');
Возвращает список всех совпадающих элементов в порядке следования документов. Вы можете получить к ним доступ по индексу или работать со всеми ними с помощью таких вещей, как
each
Http://www.prototypejs.org/api/utility
Вот что такое прототип. getElementById-это oooold
Вот рабочий пример того, как вы могли бы использовать
each
в прототипе для циклического перебора всех элементов с классомorder-cc-charged
.var order_cc_charged = 0; $$('order-cc-charged').each(function (elem) { order_cc_charged += parseFloat($('order-cc-charged').innerHTML); });
Разница между классом и идентификатором в том, что только один элемент может иметь один и тот же идентификатор, но больше элементов могут иметь один и тот же класс.
Йо Если вы хотите выбрать элементы с тем же классом, вы должны думать о том, что не всегда есть один элемент
onload=function(){ if (document.getElementsByClassName == undefined) { document.getElementsByClassName = function(className) { var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)"); var allElements = document.getElementsByTagName("*"); var results = []; var element; for (var i = 0; (element = allElements[i]) != null; i++) { var elementClass = element.className; if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass)) results.push(element); } return results; } } }
Я надеюсь, что это сработает.
Можно также использовать селектор классов jquery http://api.jquery.com/class-selector/