У меня есть следующий код, который работает в FF/ChromeIE только Javascript ошибка getElementsByTagName
var stack = [Array.prototype.slice.call(document.getElementsByTagName("body")[0].childNodes)], nodes, node, parent, text, offset;
while (stack.length) {
nodes = stack.pop();
for (var i=0, n=nodes.length; i<n; ++i) {
node = nodes[i];
switch (node.nodeType) {
case Node.ELEMENT_NODE:
if (node.nodeName.toUpperCase() !== "SCRIPT") {
stack.push(Array.prototype.slice.call(node.childNodes));
}
break;
case Node.TEXT_NODE:
text = node.nodeValue;
offset = text.indexOf("[test=");
if (offset >= 0 && text.substr(offset).match(/^(\[test=(\d+)\])/)) {
parent = node.parentNode;
var before = document.createTextNode(text.substr(0, offset));
link = document.createElement("a"),
after = document.createTextNode(text.substr(offset + RegExp.$1.length));
link.appendChild(document.createTextNode(text.substr(offset, RegExp.$1.length)));
link.setAttribute("href", "http://example.com/" + RegExp.$2);
parent.insertBefore(after, node);
parent.insertBefore(link, after);
parent.insertBefore(before, link);
parent.removeChild(node);
stack.push([after]);
}
}
}
}
В основном то, что он делает, если он находит [тест = 25] на странице он преобразует его в ссылку, которая указывает на example.com/25
в IE я получаю следующее сообщение об ошибке: JScript Object Expected на первой линии:
var stack = [Array.prototype.slice.call(document.getElementsByTagName("body")[0].childNodes)], nodes, node, parent, text, offset;
Эта ошибка возникает в обоих IE7 и IE8.
Любая помощь будет оценена по достоинству.
Спасибо.
+1. И чисто как случайное примечание: в некоторых тестах JavaScript в Firefox, которые я делал недавно, я обнаружил, что построение массива с использованием пустого литерала '[]' и 'push', по иронии судьбы, быстрее, чем метод, показанный здесь. –
Интересно! 'push' не может воссоздать разреженный список (с отсутствующими элементами), как это было выше, но для NodeList вам это не понадобится. – bobince
Спасибо за информацию и особенно за эту ссылку на другой вопрос. Это именно то, что я искал. – Rob