在可用时获取href

时间:2018-07-23 20:54:50

标签: javascript html

我正在尝试从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&#233;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&#233;der au profil du d&#233;put&#233;" 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&#234;tre" href="http://www.conservateur.ca">Conservateur</a>
        </td>
      </tr>
      <tr>
        <td class="constituency">
          <a title="Cliquez pour acc&#233;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&#233;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>

谢谢。

4 个答案:

答案 0 :(得分:1)

href是'a'标签的属性,而您的代码希望在td / tr上找到它。 您会在循环中更深一层的缺失。

<td class="constituency">
<!-- note the href on the a tag -->
    <a title="Cliquez pour acc&#233;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&#233;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&#233;der au profil du d&#233;put&#233;" 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&#234;tre" href="http://www.conservateur.ca">Conservateur</a>
                    </td>
                </tr>

                <tr>
                    <td class="constituency">
                            <a title="Cliquez pour acc&#233;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&#233;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/