【问题标题】:Why is console giving full jsFiddle link? [duplicate]为什么控制台提供完整的 jsFiddle 链接? [复制]
【发布时间】:2017-07-29 21:21:51
【问题描述】:

我写了一个小函数,它基本上说检查某些文本是否正是这个或那个:

function doSelect(text) {
  return $wikiDOM.find(".infobox th").filter(function() {
    return $(this).text() === text;
  });
}

我运行这个是为了得到/wiki/之后的最后一个字符串,比如<a href="/wiki/Geum_River" title="Geum River">Geum River</a>, <a href="/wiki/Korea" title="Korea">Korea</a>

  let pattern = new RegExp('^\/wiki\/');
  doSelect("Location").siblings('td').find('a').map(function(i, el) {
    return console.log(el.href.replace(pattern, ''));
  });

但是当我签入控制台时,我得到了整个 jsFiddle 链接

https://fiddle.jshell.net/wiki/Geum_River
https://fiddle.jshell.net/wiki/Korea

我希望

Geum_River
Korea

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    问题是因为您使用的是<a>href 属性。通过这样做,您可以检索 URI 的完整绝对路径,即:https://fiddle.jshell.net/wiki/Geum_River 而不是相对路径:/wiki/Geum_River

    要改变这种行为,直接使用属性值,使用attr()

    let pattern = new RegExp('^\/wiki\/');
    doSelect("Location").siblings('td').find('a').map(function(i, el) {    
      var result = $(this).attr('href').replace(pattern, '');
      console.log(result);
      return result;
    });
    

    还要仔细检查您是否正确使用了map()。它的目的是创建一个数组,但你没有对它的响应做任何事情。如果您只想循环遍历选定的元素,则值得使用 each() 而不使用 return

    let pattern = new RegExp('^\/wiki\/');
    doSelect("Location").siblings('td').find('a').each(function(i, el) {    
      var result = $(this).attr('href').replace(pattern, '');
      console.log(result);
    });
    

    【讨论】:

    • 确实如此!我需要简单地将它们全部循环,您介意在答案中添加循环吗?谢谢大佬
    • 逻辑是一样的,把map改成each,去掉return。我为你更新了答案
    【解决方案2】:

    你也可以这样试试:

    //let pattern = new RegExp('^\/wiki\/');
    doSelect("Location").siblings('td').find('a').each(function(i, el) {    
      var name = $(this).attr('href').split('wiki/')[1].trim();
      console.log(result);
    });
    

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 2014-11-20
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多