我正在尝试创建一个脚本,在onload中添加一个div的链接,并且出于某种原因,内容(图像)显示为书面html文本。为什么这样,我该如何纠正呢?
<!DOCTYPE html>
<html>
<head>
<title></title>
<script language="javascript" type="text/javascript">
function AffiliateLink() {
var boxes = document.getElementsByClassName('AffiliateLink'),
i = boxes.length;
while (i--) {
var link = document.createElement('a');
var content = document.createTextNode(boxes[i].innerHTML);
link.setAttribute('href', boxes[i].getAttribute('title'));
link.appendChild(content);
boxes[i].innerHTML = '';
boxes[i].appendChild(link);
}
}
</script>
</head>
<body onload="AffiliateLink()">
<div class="AffiliateLink" title="http://www.google.com">Google</div>
<div class="AffiliateLink" title="http://www.apple.com"><img src="http://files.softicons.com/download/application-icons/black-icons-by-mike-demetriou/png/128x128/App%20apple%20logo.png"></a></div>
</body>
答案 0 :(得分:3)
document.createTextNode强制HTML为文本。只需将一个innerHTML复制到另一个。
while (i--) {
var link = document.createElement('a');
link.setAttribute('href', boxes[i].getAttribute('title'));
link.innerHTML = boxes[i].innerHTML;
boxes[i].innerHTML = '';
boxes[i].appendChild(link);
}
答案 1 :(得分:1)
因为那明确是您正在创建的textNode
,它会明确地处理您为 text 提供的所有内容,而不会解释HTML。如果要设置HTML内容,请使用innerHTML
属性:
link.innerHTML = boxes[i].innerHTML;
您是否想要简单地克隆或移动boxes[i]
节点而不是将一个innerHTML
分配给另一个节点,这是有争议的。
答案 2 :(得分:0)
由于您要创建包含html
代码的文字节点,因此它们被视为text
而不是html
。
您可以通过替换
轻松解决此问题var link = document.createElement('a');
var content = document.createTextNode(boxes[i].innerHTML);
link.setAttribute('href', boxes[i].getAttribute('title'));
link.appendChild(content);
通过
var link = document.createElement('a');
link.setAttribute('href', boxes[i].getAttribute('title'));
link.innerHTML = boxes[i].innerHTML;
答案 3 :(得分:0)
超越目标的一种方式。 “创建文本节点”使文本节点。用innerHTML替换它将生成下一个代码:
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
function AffiliateLink() {
var boxes = document.getElementsByClassName('AffiliateLink'),
i = boxes.length;
while (i--) {
var a = document.createElement('a');
var content = boxes[i].innerHTML;
a.href = boxes[i].title;
a.innerHTML = content;
boxes[i].innerHTML = '';
console.log (i);
boxes[i].appendChild(a);
}
}
</script>
</head>
<body onload="AffiliateLink()">
<div class="AffiliateLink" title="http://www.google.com">Google</div>
<div class="AffiliateLink" title="http://www.apple.com"><img src="http://files.softicons.com/download/application-icons/black-icons-by-mike-demetriou/png/128x128/App%20apple%20logo.png"></a></div>
</body>
</html>