我正在尝试从href
-tr
列表中获取td
数据(请参见示例代码)。但是它总是返回null
值。我用.getElementby...()
尝试了其他方法,但我总是在某个地方撞墙。
<!DOCTYPE html>
<html>
<body>
<p>Click the button to see the 2 results in an alerte box.</p>
<button onclick="myFunction()">Try it</button>
<table class="list" role="presentation">
<thead>
<tr>
<th><a href="/Parliamentarians/fr/constituencies?sortBy=Name&sortDescending=True">Circonscription</a><span class="icon-ascending"></span></th>
<th><a href="/Parliamentarians/fr/constituencies?sortBy=Province&sortDescending=False">Province / Territoire</a></th>
</tr>
</thead>
<tbody>
<tr>
<td class="constituency">
<a title="Cliquez pour accéder au profil de la circonscription" href="/Parliamentarians/fr/constituencies/Abbotsford(898)">Abbotsford</a>
</td>
<td class="constituency">Colombie-Britannique</td>
<td class="personName">
<a title="Cliquez pour accéder au profil du député" href="/Parliamentarians/fr/members/Ed-Fast(35904)">Fast, Ed <abbr>(L'hon.)</abbr></a>
</td>
<td class="caucus">
<a target="_blank" title="Site Web du parti politique - Ouvre une nouvelle fenêtre" href="http://www.conservateur.ca">Conservateur</a>
</td>
</tr>
<tr>
<td class="constituency">
<a title="Cliquez pour accéder au profil de la circonscription" href="/Parliamentarians/fr/constituencies/Abitibi-Baie-James-Nunavik-Eeyou(637)">Abitibi—Baie-James—Nunavik—Eeyou</a>
</td>
<td class="constituency">Québec</td>
<td class="personName">
</td>
<td class="caucus">
</td>
</tr>
</tbody>
</table>
<script>
function myFunction() {
var nodeList = document.querySelectorAll('.constituency');
var nodeList2 = document.querySelectorAll('.personName');
var nodeList3 = document.getElementsByClassName('caucus');
/* i+=2, because first is circonscription and next is province */
for (var i = 0, j = 0; i < nodeList.length; i += 2, j++) {
alert(nodeList[i].innerText + '|' + nodeList[i].getAttribute('href') + '|' + nodeList[i + 1].innerText + '|' + nodeList2[j].innerText + '|' + nodeList2[j].getAttribute('href') + '|' + nodeList3[j].innerText + '|' + nodeList3[j].getAttributeNode('href'));
}
}
</script>
</body>
</html>
谢谢。
答案 0 :(得分:1)
href是'a'标签的属性,而您的代码希望在td / tr上找到它。 您会在循环中更深一层的缺失。
<td class="constituency">
<!-- note the href on the a tag -->
<a title="Cliquez pour accéder au profil de la circonscription" href="/Parliamentarians/fr/constituencies/Abbotsford(898)">Abbotsford</a>
</td>
您的JavaScript代码应如下所示:
nodeList[i].children[0].getAttribute('href')
答案 1 :(得分:0)
您正在遍历包含element的元素。
在您的for循环中,您需要插入另一个将在childNodes上进行迭代的for循环,或者您可以尝试跳过该循环并通过firstChild属性访问A元素。
这两种方法都可以为您提供帮助:
nodeList3[j].childNodes[0].getAttribute('href')
nodeList3[j].firstChild.getAttribute('href')
答案 2 :(得分:0)
我认为最简单的方法可能是更新JavaScript中的CSS选择器,以限制类选择器的“第一个孩子”:
<!DOCTYPE html>
<html>
<body>
<p>Click the button to see the 2 results in an alerte box.</p>
<button onclick="myFunction()">Try it</button>
<table class="list" role="presentation">
<thead>
<tr>
<th><a href="/Parliamentarians/fr/constituencies?sortBy=Name&sortDescending=True">Circonscription</a><span class="icon-ascending"></span></th>
<th><a href="/Parliamentarians/fr/constituencies?sortBy=Province&sortDescending=False">Province / Territoire</a></th>
</tr>
</thead>
<tbody>
<tr>
<td class="constituency">
<a title="Cliquez pour accéder au profil de la circonscription" href="/Parliamentarians/fr/constituencies/Abbotsford(898)">Abbotsford</a>
</td>
<td class="constituency">Colombie-Britannique</td>
<td class="personName">
<a title="Cliquez pour accéder au profil du député" href="/Parliamentarians/fr/members/Ed-Fast(35904)">Fast, Ed <abbr>(L'hon.)</abbr></a>
</td>
<td class="caucus">
<a target="_blank" title="Site Web du parti politique - Ouvre une nouvelle fenêtre" href="http://www.conservateur.ca">Conservateur</a>
</td>
</tr>
<tr>
<td class="constituency">
<a title="Cliquez pour accéder au profil de la circonscription" href="/Parliamentarians/fr/constituencies/Abitibi-Baie-James-Nunavik-Eeyou(637)">Abitibi—Baie-James—Nunavik—Eeyou</a>
</td>
<td class="constituency">Québec</td>
<td class="personName">
</td>
<td class="caucus">
</td>
</tr>
</tbody>
</table>
<script>
function myFunction() {
var nodeList = document.querySelectorAll('.constituency > a');
var nodeList2 = document.querySelectorAll('.personName > a');
var nodeList3 = document.getElementsByClassName('.caucus > a');
/* i+=2, because first is circonscription and next is province */
for(var i = 0, j = 0; i < nodeList.length; i+=2, j++ ) {
alert(nodeList[i].innerText + '|' + nodeList[i].getAttribute('href') + '|' + nodeList[i+1].innerText + '|' + nodeList2[j].innerText + '|' + nodeList2[j].getAttribute('href') + '|' + nodeList3[j].innerText + '|' + nodeList3[j].getAttributeNode('href'));
}
}
</script>
</body>
</html>
答案 3 :(得分:0)
一旦您拥有元素<a>
来选择所有网址,就可以在,
中用querySelectorAll
选择多个选择器中的所有.href
var nodeList = document.querySelectorAll('.constituency > a, .personName > a, .caucus > a');
for(let i = 0; i<nodeList.length; i++){
console.log(nodeList[i].href);
}
此处的完整示例:http://jsfiddle.net/0c2fgdLu/17/