Использование селекторов jQuery XPath - PullRequest
0 голосов
/ 25 мая 2009

Я использую простую функцию синтаксического анализатора DOM, чтобы перехватывать информацию XPath всех узлов документа

Например, HTML-код:

<div>
  <div>Everyday People</div>
  <div>My name is ACE</div>
  <div>Hello world</div>
</div>

Анализ DOM для сохранения информации XPath в массиве arr:

<script type="text/javascript" src="js/jquery/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="js/jquery/js/xpath-selector.js"></script>

<script type="text/javascript">
function get_XPath(elt) 
{
  var path = '';
  for (; elt && elt.nodeType == 1; elt = elt.parentNode)
  {
    var idx = $(elt.parentNode).children(elt.tagName).index(elt) + 1;
    idx > 1 ? (idx='[' + idx + ']') : (idx='');
    path = '/' + elt.tagName.toLowerCase() + idx + path;
  }
  return path;
}

var arr = Array();
htmlDoc = document;
x = htmlDoc.documentElement.childNodes;

for (i=0; i<x.length; i++)
{
  arr.push(get_XPath(x[i]));  
}
</script>

Позже в скрипте я использую значения, хранящиеся в arr, для выполнения некоторых функций, таких как отображение, скрытие или изменение содержимого узлов.

<script>
for(i=0;i<arr.length;i++)
{
  //catch the object reference with the XPath info
  $(arr[i])

}
</script>

В приведенном выше фрагменте я получаю объект, но не могу получить ссылку на объект, чтобы использовать его для чего-то вроде:

$(arr[i]).text();

Любая помощь будет приветствоваться. Кто-нибудь работал с селекторами jQuery XPath?

Ответы [ 2 ]

2 голосов
/ 25 мая 2009

Первый вопрос, который приходит на ум, это ... Почему вы это делаете?

Вы генерируете XPath для элемента и сохраняете его в массиве, чтобы позже можно было ссылаться на этот элемент? Почему бы вам просто не сохранить сам элемент?

Что вы пытаетесь сделать в первую очередь? Глядя на ваш вопрос и ничего не зная, я подозреваю, что подходы могут быть проще, чем ваши.

2 голосов
/ 25 мая 2009

Я не совсем уверен, нужны ли вам Xpath для чего-то другого, кроме выбора элементов. Потому что если вы этого не сделаете, то можете сами хранить элементы в Arr Array:

var arr = new Array();
htmlDoc = document;
x = htmlDoc.documentElement.childNodes;

for (i=0,b=x.length; i<b; i++){
  arr.push($(x[i]));  
}

Тогда вы можете сделать:

arr[i].text();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...