0

好吧,我可能很厚,但我无法得到一些工作,它困扰着我为什么。我在 Javascript 中使用全局替换属性,但每当我这样做时,它都不会超出我所在的 DIV。

我所在的 DIV 不是我需要定位的 DIV,但下面是一个简化的示例。

<div id="foo">
<a href="http://www.somesite.com" target="_blank" class="footer">Site 1</a>
</div>

<script type="text/javascript">
window.onload =  function replaceScript() {
   var replacement = '<a href="http://www.somesite.com" target="_blank" class="footer">Site 1</a>';
var text = '<a href="http://www.othersite.com" title="Other Site" target="_blank">Site 2</a>';

document.getElementById("foo").innerHTML = text.replace(new RegExp(replacement, 'g'), '');

}
</script>

我尝试的另一种方法是:

<script type="text/javascript">
window.onload = function replaceScript() {
var toReplace = '<a href="http://www.somesite.com" target="_blank" class="footer">Site 1</a>';
var replaceWith ='<a href="http://www.othersite.com" title="Other Site" target="_blank">Site 2</a>';
document.getElementById("foo") = document.body.innerHTML.replace(toReplace, replaceWith);
}
</script>

但我不能让那个在全球范围内工作,

4

3 回答 3

1

我不认为你想用正则表达式来做这个,你应该使用 DOM 方法,就像这样

HTML

<div id="foo">
<a href="http://www.somesite.com" target="_blank" class="footer">Site 1</a>
</div>

Javascript

var fooA = document.getElementById("foo").children[0];

fooA.href = "http://www.othersite.com";
fooA.title = "Other Site";
fooA.firstChild.nodeValue = "Site 2";

结果

<div id="foo">
<a href="http://www.othersite.com" target="_blank" class="footer" title="Other Site">Site 2</a>
</div>

jsfiddle 上

于 2013-06-16T21:13:54.837 回答
0

您应该使用 DOM 元素,而不是使用字符串比较。这也创建了更具可读性和更易于维护的代码,因为它更具描述性。

var element = document.getElementById("foo"); 
var links = element.getElementsByTagName("a"); // get all links that are children of the div foo 
for (var i = 0; i < links.length; i++) { // Loop over the list
    if (links[i].getAttribute("href") == "http://www.somesite.com" ) { // Identify the link(s) we need to change
        links[i].setAttribute('href', 'http://otherside.com');
        links[i].setAttribute('title', 'Site2');

        links[i].innerHtml = 'Site2';
        // note that links[i].textContent would be better but it is not as cross browser compatible
    }
}

请注意,这不需要任何 javascript 框架。如果您使用的是 jQuery 之类的框架,则可以简化此操作。

于 2013-06-17T06:03:15.710 回答
0

不确定您要做什么,但是更改代码是有意义的。

var child= document.querySelector("#foo a");
child.href="http://otherside.com"
child.title="Site2"
child.innerText= "Site2"

适用于 IE>=8 和所有其他浏览器。

于 2013-06-16T21:14:48.920 回答