如何在JavaScript中更改图像的路径名?

时间:2016-08-07 20:06:50

标签: javascript

searchURL: function() {
    function insertAfter(newNode, referenceNode) {
        referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
    }
    var link, url, parser, newPathName = '',
        emailUrl = /\/img\//,
        newstr = '',
        doc = document,
        container,
        container_id,
        container_links,
        container_images,
        documentTableWrapper,
        docBodyFirstChild,
        nodeToTargetToInsertLP;

    if (!doc.getElementById('container')) {
        container = doc.createElement('div');
        container.setAttribute('id', 'container');
        container.className = 'container-avon-representative-news';
        container_links = container.getElementsByTagName('a');
        container_id = doc.getElementById('container');
        docBodyFirstChild = doc.body.firstChild;
        nodeToTargetToInsertLP = doc.getElementsByClassName('flexTile')[4];


        if (nodeToTargetToInsertLP) {
            documentTableWrapper = doc.getElementsByClassName('marginfix')[0];
            container.appendChild(documentTableWrapper);
            insertAfter(container, nodeToTargetToInsertLP);
        } else {
            documentTableWrapper = doc.getElementsByTagName('table')[0];
            container.appendChild(documentTableWrapper);
            doc.body.insertBefore(container, docBodyFirstChild);
        }


    } else {
        container_links = doc.getElementById('container').getElementsByTagName('a');
    }
    container_images = container.getElementsByTagName('img');
    for (var i = 0; i < container_images.length; i++) {
       if (arguments[0] == "smo" || arguments[1] == "smodev") { 
          container_images[i].src = container_images[i].src.replace(emailUrl, '/images/dir_a/');
      } else {
          container_images[i].src = container_images[i].src.replace(emailUrl, '/static/images/dir_b/');

      }
    }

    for (var i = 0, len = arguments.length; i < len; i++) { 
        url = getURL(arguments[i]); 
        for (var j = 0, jlen = container_links.length; j < jlen; j++) { 
            link = container_links[j];
            if (link.href.indexOf(url) !== -1) { 
                parser = document.createElement('a'); 
                parser.href = link.href;

                link.setAttribute('target', '_self');
                newPathName = parser.pathname;


                if (newPathName.search(/Executive|District|Division|National/) != -1) { 
                    newPathName = newPathName.split('/').pop();
                    newstr = newPathName;

                } else {
                    newstr = newPathName;
                }
                link.href = newstr;
            } else {
                link.setAttribute('target', '_blank');

            }
        }
    }
},

我有一个循环,它通过图像是div的孩子:

var container_images = container.getElementsByTagName('img'),
            emailUrl = /\/img\//;
  for (var i = 0; i < container_images.length; i++) {
      if (arguments[0] == "smo" || arguments[1] == "smodev") { 
          container_images[i].src = container_images[i].src.replace(emailUrl, '/images/dir_a/');
      } else {
          container_images[i].src = container_images[i].src.replace(emailUrl, '/static/images/dir_b/');

      }
  }

奇怪的是,这是在一个实例(服务器的另一个区域)中工作,但在另一个实例中它添加了我甚至没有指出的其他路径名/目录?!

我认为replace足够明确:

xxx.src.replace(emailUrl, '/images/dir_a/'); 

如果此image代码的源属性设置为/\/img\//,请将其替换为/images/dir_a/

有没有人知道一个更明确的方法,并且不会添加我没有指定的目录?

有人能用replace方法解释这是怎么回事吗?

更新 为了给出一些背景我没有任何问题的环境如下:我的公司使用CMS来提供这些页面。文件扩展名为.page;我从来没有听说过使用CMS以外的扩展,所以我认为它是CMS专有的。

无论如何,在CMS中,您还可以像从任何其他服务器那样提供服务器html文件。但在这种情况下,当我检查开发工具中的来源时,似乎添加了<img src="http://xxx.xxx.com/REPSuite/static/html/inews_archives/static/images/dir_b/xxx.png">而不是<img src="http://xxx.xxx.com/REPSuite/static/images/dir_b/xxx.png">

2 个答案:

答案 0 :(得分:1)

问题是您使用的是.src,并且您希望使用.getAttribute('src').setAttribute('src', 'your new src')

  

HTMLImageElement.src

     

是反映src HTML的DOMString   属性,包含图像的完整URL,包括基URI。

所以当你拨打.src时,它会给你完整的绝对当前uri。您只想获取/设置src属性。 working example jsbin

答案 1 :(得分:0)

答案结果很简单(当然事后)。无论如何 - 因为我在其他获取服务的环境中获得了那种时髦的路径 ,我只是做了一个检查 的条件 时髦的道路。

因此,我没有检查一个正则表达式,而是检查了两个。

var emailUrl = /img\//gi,
    tsUrl = /\/REPSuite\/static\/html\/inews_archives\/img\//gi;


for (var i = 0; i < avon_rep_container_images.length; i++) {
     if (arguments[0] == "smo" || arguments[1] == "smodev") { // Checks what environment the page will be used in so we can change the src attribute of all the images in the document to the appropriate path
         avon_rep_container_images[i].src = avon_rep_container_images[i].src.replace(emailUrl, '/images/avon_manager_news/');
    } else if(!nodeToTargetToInsertLP) {
         avon_rep_container_images[i].src = avon_rep_container_images[i].src.replace(tsUrl, '/REPSuite/static/images/rep_news/');
    } else {
        avon_rep_container_images[i].src = avon_rep_container_images[i].src.replace(emailUrl, '/static/images/rep_news/');
    }
}

感谢所有帮助过的人,我很感激!