2013-08-09 3 views
1

Мне нужно сделать операцию DOM на DocumentFragment, и я пытаюсь использовать XPath для поиска узлов, которые необходимо изменить. Однако я не могу понять, как получить document.evaluate для работы над фрагментом. Я попробовалЗапрос XPath на DocumentFragment

fragment.ownerDocument.evaluate(
    '//*', 
    fragment.ownerDocument, 
    null, 
    XPathResult.ANY_TYPE, 
    null 
) 

но это не сработало.

+0

Будет ли это «document.createDocumentFragment» с узлами DOM или это XML, здесь не так много контекста? – adeneo

+0

@adeneo Он исходит из обращения к http://www.saxonica.com/ce/user-doc/1.1/#!api/xslt20processor/transformToFragment –

ответ

0

Используйте svg как временный элемент, если вам нужно запустить XPath против XML, поскольку ограничения безопасности препятствуют оценки XPath выражения на элемент не прикреплен к DOM:

<!DOCTYPE HTML> 
<html lang="en"> 
<head> 
<title>XPath Context</title> 
<meta charset="utf-8"> 
</head> 
<body> 

<svg id="model" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100""> 
    <?foo bar?> 
</svg> 

<script type="text/javascript;version=1.7"> 
function $xpath(aXPath, aContext) 
    { 
    let nodes = []; 
    aContext = document.getElementById("model") || doc; 
    let results = document.evaluate(aXPath, aContext, null, XPathResult.ANY_TYPE, null); 
    let node; 

    while ((node = results.iterateNext())) { 
     nodes.push(node); 
    } 

    return nodes; 
    } 
</script> 
</body> 
</html> 

Или использовать реализацию JavaScript.

Смежные вопросы