Выбор элемента из DOM с помощью JavaScript и XPath
Я пытаюсь выяснить, как выбрать текстовое поле в коде ниже с помощью xpath и JavaScript (это единственный вариант здесь).
<body>
<div id="calculator">
<div id="calculatorController">
<form action="#" method="get" onsubmit="return false">
<p>
<textarea disabled="disabled"></textarea>
</p>
</form>
...
Я пытаюсь сделать что-то вроде этого
var element = document.evaluate( '//body/form/p/textarea' ,document, null, XPathResult.ANY_TYPE, null );
// and write back
element.value = "Hello textarea";
Но он терпит неудачу
Любой, кто хочет помочь?
Спасибо
Обновить ниже
=============================================== =============
Весь блок кода выглядит так.
Не забывайте window.onload=function()
<html>
<head>
<script type='text/javascript'>
//<![CDATA[
window.onload=function(){
var element = document.evaluate( '//body//form/p/textarea' ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
if (element != null) {
element.value = 'Hello textarea';
}
}
//]]>
</script>
</head>
<body>
<div id="calculator">
<div id="calculatorController">
<form action="#" method="get" onsubmit="return false">
<p>
<textarea disabled="disabled"></textarea>
</p>
</form>
</div>
</div>
</body>
</html>
Ответы
Ответ 1
Метод оценки не возвращает DOM node, как вы, кажется, ожидаете. Вам понадобится
var element = document.evaluate( '//body//form/p/textarea' ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
if (element != null) {
element.value = '...';
}
Ответ 2
Комментарий @Mark Robinson прав, ваше выражение Xpath неверно, вы можете использовать один из них:
//body/div/div/form/p/textarea (Mark example)
//body//form/p/textarea (any form in body)
Кроме того, функция оценки вернет объект XPathResult, а не текстовое поле, так что вы не можете сделать непосредственно element.value
Вот ваш пример исправлен:
<body>
<div id="calculator">
<div id="calculatorController">
<form action="#" method="get" onsubmit="return false">
<p>
<textarea disabled="disabled"></textarea>
</p>
</form>
</div>
</div>
</body>
-
var element = document.evaluate( '//body/div/div/form/p/textarea' ,document, null, XPathResult.ANY_TYPE, null );
var textarea = element.iterateNext ();
textarea.value = "Hello textarea";