2012-06-14 5 views
2

Я хочу написать функцию, которая идентифицирует все ссылки на определенной странице HTML. Моя идея состояла в том, чтобы использовать XPath, используя путь, такой как //body//a[x] и увеличивая x для прохождения первой, второй, третьей ссылки на странице.Как выбрать все ссылки на странице с помощью XPath

Просматривая это в Chrome, я загружаю страницу http://exoplanet.eu/ и в консоли консоли разработчика Chrome, я звоню $x("//body//a[1]"). Я ожидаю, что первая ссылка на странице, но это возвращает список нескольких элементов привязки. Вызов $x("//body//a[2]") возвращает два якорных элемента. Вызов $x("//body//a[3]") ничего не возвращает.

Я надеялся, что приращение [x] каждый раз даст мне каждую уникальную ссылку по одному на странице, но они, похоже, сгруппированы. Как я могу переписать этот путь таким образом, чтобы каждый ящик привязывал каждый тег привязки один за другим?

ответ

-1

Если вы используете путь //body/descendant::a[1], //body/descendant::a[2] и так далее, вы можете выбрать все последующие элементы a элемента body. Или с вашей попыткой вам нужны скобки, например. (//body//a)[1], (//body//a)[2] и так далее.

Обратите внимание, что в браузере с Javascript есть коллекция document.links в объектной модели, поэтому XPath не нужен для доступа к ссылкам.

6

Ваш //body//a[1] должен быть (//body//a)[1], если вы хотите выбрать первую ссылку на страницу. В первом выражении выбирается любой элемент, который является первым дочерним элементом его родительского элемента.

Но все равно очень странно. Зачем вам нужны ссылки один за другим? Просто выберите все из них, как список узлов или узлов, используя //body//a, а затем перейдите по набору.