通过javascript获取href标签的值

时间:2013-07-24 16:24:05

标签: javascript parsing

如何使用javascript获取href标记中>testhere</a>之间文本的值?

<a style="color:#39485;" href="/index.html">Hello, 112</a>

112和/index.html将始终不同,唯一相同的是Hello,所以记住如何获得在这种情况下为112的值?我不想要Hello,部分,只有112.数字的位数可能会有所不同,它不一定是3位数,例如这一位。 上面的一行是:

<div id="nna">

以下是:

</span>

另一个是:

<a href="/index/page?number=33" class="page_number">

/ index / page?number =将始终相同,类值也是如此。 上面的一行始终是:

<div id="mla">

下面的行总是:

<div class="friend_block_avatar">

希望这会让事情变得更容易。 我想获得总是不同的数字,在这种情况下是33。 我将在我的浏览器中运行javascript,这是通过url栏的chrome,如下所示:javascript:javascriptcodegoeshere。所以我不能使用jquery。这个数字的位数也可能不同,它不一定是2位数。 这两个都将在同一页面的源代码中。

5 个答案:

答案 0 :(得分:0)

首先找到所有锚点:

var anchors = document.links;

然后解析它们并通过使它们与众不同的方式进行拆分:Hello,

if(anchors.length > 0) {
    for(var i in anchors) {
        var str = anchors[i].innerText;

        if(undefined !== str) {
            var parts = str.split('Hello, ');

            if(parts.length > 0 && parts[0] === '') {
                console.log(parts[1]);
            }
        }
    }
}

使用此示例数据:

<a style="color:#39485;" href="/index.html">Hello, 112</a>
<a style="color:#39485;" href="/index1.html">Hello, 113</a>
<a style="color:#39485;" href="/index2.html">Hello, 114</a>
<a style="color:#39485;" href="/index3.html">113</a>
<a href="/index/page?number=33" class="page_number">Hello, 123</a>

...您的控制台将显示112113114123

<强> Fiddle here

答案 1 :(得分:0)

假设:您希望页面上所有锚标记的href和html中包含任意数量的数字。

您可以使用chrome中的OmniBar执行以下操作(您知道可以使用Chrome的内置控制台在当前页面上执行javascript吗?)。

javascript: var anchors = document.querySelectorAll('a'); anchors.forEach = [].forEach; function grabDigits (string) { var match = string.match(/\d+/); if (match && match[0]) { return match; } } anchors.forEach(function(anchor){ console.log('text: ' + grabDigits(anchor.innerHTML)); console.log('href: ' + grabDigits(anchor.href)); }); /* run with: javascript: var anchors = document.querySelectorAll('a'); anchors.forEach = [].forEach; anchors.forEach(function(anchor){ match = anchor.innerHTML.match(/\d+/); if (match && match[0]) { console.log(match[0]); } }); */

Chrome可能会删除初始javascript:位,因此您可能需要手动将其输入到omnnibar中,然后复制并粘贴其余的脚本。

我在这里随心所欲,但它似乎在起作用^^:

<强> JS

var anchors = document.querySelectorAll('a');

anchors.forEach = [].forEach;


function grabDigits (string) {
  var match = string.match(/\d+/);
  if (match && match[0]) { 
    return match;
  }
}

anchors.forEach(function(anchor){
  console.log('text: ' + grabDigits(anchor.innerHTML));
  console.log('href: ' + grabDigits(anchor.href));

});

jsbin

答案 2 :(得分:0)

由于您的hrefinnerHTML前缀将始终相同,并且您只是在寻找下面的数字,因此您可以使用简单的正则表达式来完成此操作。例如:

HTML:

<a style="color:#39485;" href="/index.html">Hello, 112</a>
<a href="/index/page?number=33" class="page_number">some link</a>
<a href="index.html">Should not be included</a>

JS:

var regex = /.*number=(\d+)|Hello,\s(\d+)/
var links = document.getElementsByTagName("a");
var innerHtmlNumbers = [];
var hrefNumbers = [];
for (var index = 0; index < links.length; index++) {
  var link = links[index];
  var match = regex.exec(link.getAttribute("href")); // Check the href first
  if (match) {
    // Found an href like "/index/page?number=12381239"
    var hrefNumber = match[1];
    hrefNumbers.push(hrefNumber);
  } else {
    // Check innerHTML for something like "Hello, 123813912"
    match = regex.exec(link.innerHTML);
    if (match) {
      var innerHtmlNumber = match[2];
      innerHtmlNumbers.push(innerHtmlNumber);
    }
  }
}
console.log(hrefNumbers);
console.log(innerHtmlNumbers):

拿一个look at this jsfiddle查看一个有效的例子。这样,您就可以一次性浏览所有<a>标记。

答案 3 :(得分:0)

第一种情况:

查找所有锚点,然后如果文本以“Hello”开头,则将其解压缩:

var anchors = document.getElementsByTagName('a'),
    values = [],
    str = /Hello, /,
    i;

for (i = 0; i < anchors.length; i += 1) {
    if (str.test(anchors[i].text)) {
        values.push(anchors[i].text.replace(str, ''));
    }
}

console.log(values); // an array containing all the values

Demo1

第二种情况:

查找href以'href =“/ index / page?number ='开头的所有锚点并提取值:

var anchors = document.querySelectorAll('a[href^="/index/page?number="]'),
    values = [],
    i;

for (i = 0; i < anchors.length; i += 1) {
    values.push((anchors[i].pathname + anchors[i].search).replace('/index/page?number=', ''));
}

console.log(values); // an array containing all the values

Demo2

答案 4 :(得分:-2)

我不确定我理解你的问题是正确的 - 你想减少其他内容的数量吗?您可以使用string.split执行此操作:如果您有一个带断点的字符串,例如

a =“你好,112”

你可以这样做:

a.split(“,”)将返回一个数组:

{ “你好”, “112”}

我希望我理解正确^^