从Javascript中的标记数组中提取锚点href文本值

时间:2015-01-13 01:17:31

标签: javascript text anchor href

  1. 目标是让函数追加或截断特定的锚点href"文本值"
  2. Tag对象和Class name的数组与字符串一起传递,以追加或截断为href"文本值"

            <table>
                <tr>
                    <td class="columnOne">
                        <span class="processTitle"> 
                            <a href="sample_US.html">Sample (US version)</a> 
                        </span> 
                        <span class="updateIndicator">12/28/2014</span> 
                    </td>
                    <td>
                        <div class="loc_us">
                            <span class="templateName">Request Form</span>
                            <span class="templateLinks"> 
                                <a target="_blank" href="Templates_Form.xls" class="linkTemplate"></a> 
                            </span>
                            <span class="processTitle"> 
                                <a href="sample2_US.html">Sample2 (US version)</a> 
                            </span> 
                        </div>
                    </td>
                </tr>
            </table>
    
  3. 初始化函数调用追加/截断URL的示例:

    function initProjectType() {
        theSpanTags_ar = document.getElementsByTagName("SPAN")
        appendURLs(theSpanTags_ar,"processTitle","?loc=US");
    }
    function appendURLs(whichTag_ar, whatClassName, theAppendString, URLremoveString) {
    for(i=0; i<whichTag_ar.length; i++) {                                   // loop thru the tags   
        if (whichTag_ar[i].className === whatClassName){                    // match tag to class
            var theLinkTags_ar = whichTag_ar[i].getElementsByTagName("A")   // extract the Anchor into an array
            for(j=0; j<theLinkTags_ar.length; j++) {                        // loop thru the number of Anchors          
                theLink = theLinkTags_ar[j].nodeValue.href;                 // extract the href "text value" <<<---help?    
                if (URLremoveString) {                                      // if truncate the href value
                    if (theLink.indexOf(URLremoveString) != -1) {
                        theLink = theLink.substr(URLremoveString.length)
                        theLinkTags_ar[j].href = theAppendString + theLink;
                    }
                } else {                                                    // else append the href value
                    theLinkTags_ar[j].href = theLink + theAppendString;
                }
            }
        }
    }
    }
    

    我尝试了各种变体来提取文本字符串值但没有成功,但是假设对象是在数组中传递的,那么像GetElementByID.GetByTagName这样的简单方法似乎不起作用。还试图坚持使用Javascript。

    我可能在这里错过了一个基本点,并提前感谢你帮助我不断学习!

3 个答案:

答案 0 :(得分:1)

在Javascript中,对象中定义了两种方法:

getAttribute(attributeName)setAttribute(attributName, value)

因此,一旦您引用了链接,您可能会想要使用以下内容:

for(j=0; j<theLinkTags_ar.length; j++)
{
  var link = theLinkTags_ar[j]; //easy access to the link without indexer.

  var linkHref = link.getAttribute('href'); //get the href.

  if (URLremoveString != null )
  {
     if(linkHref.indexOf(URLremoveString) != -1){
        linkHref = linkHref.substr(URLremoveString.length)
        linkHref = theAppendString + linkHref;
     }
  }
  else
  {
     linkHref = linkHref + theAppendString;
  } 

  link.setAttribute('href', linkHref);
}

答案 1 :(得分:0)

要获取href的值,请直接在链接上阅读 href 属性:

theLink = theLinkTags_ar[j].href; 

要更轻松地选择所需元素,请考虑:

var nodes = document.querySelectorAll('span.processTitle");

如果你想要那里面的A元素:

var nodes = document.querySelectorAll('span.processTitle > a');

不确定是否支持IE 8中的复杂选择器,因此您可能希望保留循环方法。

答案 2 :(得分:0)

上面的回答使用.getAttribute('href')来回复href文本值完美无缺。

请注意,代替使用link.setProperty('href',linkHref)它不起作用,但转换到link.setAttribute('href',linkHref)解决了这个问题。

最终片段:

for(j=0; j<theLinkTags_ar.length; j++)
{
  var link = theLinkTags_ar[j]; //easy access to the link without indexer.

  var linkHref = link.getAttribute('href'); //get the href.

  if (URLremoveString != null )
  {
     if(linkHref.indexOf(URLremoveString) != -1){
        linkHref = linkHref.substr(URLremoveString.length)
        linkHref = theAppendString + linkHref;
     }
  }
  else
  {
     linkHref = linkHref + theAppendString;
  } 

  link.setAttribute('href', linkHref);
}

谢谢!