Выбор элемента из DOM с помощью JavaScript и XPath - PullRequest
25 голосов
/ 24 июня 2011

Я пытаюсь выяснить, как выбрать текстовое поле в приведенном ниже коде, используя 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>

Ответы [ 2 ]

33 голосов
/ 24 июня 2011

Метод оценки не возвращает узел DOM, как вы ожидаете.Вам понадобится

var element = document.evaluate( '//body//form/p/textarea' ,document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
if (element != null) {
  element.value = '...';
}
2 голосов
/ 24 июня 2011

@ Комментарий Марка Робинсона верен, ваше выражение Xpath неверно, вы можете использовать один из них:

//body/div/div/form/p/textarea (Mark's 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...