Если кому-то нужно сделать это без jQuery , просто с обычным Javascript и для Google Chrome (webkit) , я нашел единственный способ заставить его работать после долгих исследований и испытаний.
parentNode.getElementsByTagNameNS("*", "name");
Это будет работать для получения следующего узла: <prefix:name>
. Как видите, префикс или пространство имен опущено, и оно будет сопоставлять элементы с различными пространствами имен при условии, что имя тега равно name
. Но, надеюсь, это не станет для вас проблемой.
Ничего из этого не помогло мне (я разрабатываю расширение Google Chrome):
getElementsByTagNameNS("prefix", "name")
getElementsByTagName("prefix:name")
getElementsByTagName("prefix\\:name")
getElementsByTagName("name")
Редактировать : после некоторого сна Я нашел рабочий обходной путь :) Эта функция возвращает первый узел, соответствующий полному nodeName
, например <prefix:name>
:
// Helper function for nodes names that include a prefix and a colon, such as "<yt:rating>"
function getElementByNodeName(parentNode, nodeName)
{
var colonIndex = nodeName.indexOf(":");
var tag = nodeName.substr(colonIndex + 1);
var nodes = parentNode.getElementsByTagNameNS("*", tag);
for (var i = 0; i < nodes.length; i++)
{
if (nodes[i].nodeName == nodeName) return nodes[i]
}
return undefined;
}
Его можно легко изменить, если вам нужно вернуть все соответствующие элементы. Надеюсь, это поможет!