document.querySelectorAll("a") 返回空白节点列表 # url
document.querySelectorAll("a") returning blank nodelist with # url
我有一些 javascript 将变量 (c) 的文本添加到 querySelectorAll("a") 标识的所有链接的 href。
这通常工作正常。
问题是,当我转到此页面的 URL 并在其后添加一个 hash/pound 符号和任何内容,例如“#something” the querySelectorAll("a") returns 一个空白节点列表。这是我的代码:
$(document).ready(function() {
m = document.querySelectorAll("a");
m.forEach(function(item){
v = item.getAttribute("href");
item.setAttribute( "href", v.concat(window.c) );
});
})
这是我发现节点列表返回空白的方式:
<p id="p1"></p>
<script type="text/javascript">
$(document).ready(function() {
m = document.querySelectorAll("a");
m.forEach(function(item){
v = item.getAttribute("href");
document.getElementById("p1").innerHTML = v + " ";
item.setAttribute( "href", v.concat(window.c) );
});
})
</script>
这个returns"null "段id="p1"。
为什么 querySelectorAll 似乎不起作用的任何想法,至少在 Chrome 中,当加载一个带有“#”的 url 时?
更新:
CertainPerformance 希望我 post 我拥有的任何依赖于 # 的其他脚本,所以这里是:
/* This code adds or removes #_numbers to the end of the URL if the user clicks a accordion link */
if(window.location.href.indexOf("#") > -1) {
h = window.location.href.indexOf("#");
i = window.location.href.length;
j = window.location.href.substring(h, i);
x = j
}else{
x = "#_"
}
$(document).ready(function(){
$("#heading1").click(function(){
//when heading link is clicked, it toggles the section
$("#section1").toggle();
if(window.x.includes("1")){
//if x has a 1 in it, get rid of the 1
window.x = window.x.replace("1", "");
}
else{
window.x = window.x.concat("1"); //if x doesn't have a 1 in it, add a 1
}
window.x = window.x.replace("#_", ""); //remove multiple instances of #_ if there are any
y = "#_"
window.x = y.concat(window.x) // add #_ to the beginning of x
$('a[href]').each(function(){
var oldUrl = $(this).attr("href"); // set oldUrl to link above
if(oldUrl.includes("#_")){
oldUrl = oldUrl.replace("#_", "");
}
if(oldUrl.includes("1")){
oldUrl = oldUrl.replace("1", "");
}
var newUrl = oldUrl.concat(window.x); // for each link, concatenate it with x
$(this).attr("href", newUrl); // Set herf value
document.getElementById("heading1").href = window.x;
});
});
});
Gabriele Petrioli 在评论中修复了它。他说:
可能有些 a 标签没有 href。尝试使用 m = document.querySelectorAll("a[href]");
我有一些 javascript 将变量 (c) 的文本添加到 querySelectorAll("a") 标识的所有链接的 href。
这通常工作正常。
问题是,当我转到此页面的 URL 并在其后添加一个 hash/pound 符号和任何内容,例如“#something” the querySelectorAll("a") returns 一个空白节点列表。这是我的代码:
$(document).ready(function() {
m = document.querySelectorAll("a");
m.forEach(function(item){
v = item.getAttribute("href");
item.setAttribute( "href", v.concat(window.c) );
});
})
这是我发现节点列表返回空白的方式:
<p id="p1"></p>
<script type="text/javascript">
$(document).ready(function() {
m = document.querySelectorAll("a");
m.forEach(function(item){
v = item.getAttribute("href");
document.getElementById("p1").innerHTML = v + " ";
item.setAttribute( "href", v.concat(window.c) );
});
})
</script>
这个returns"null "段id="p1"。
为什么 querySelectorAll 似乎不起作用的任何想法,至少在 Chrome 中,当加载一个带有“#”的 url 时?
更新:
CertainPerformance 希望我 post 我拥有的任何依赖于 # 的其他脚本,所以这里是:
/* This code adds or removes #_numbers to the end of the URL if the user clicks a accordion link */
if(window.location.href.indexOf("#") > -1) {
h = window.location.href.indexOf("#");
i = window.location.href.length;
j = window.location.href.substring(h, i);
x = j
}else{
x = "#_"
}
$(document).ready(function(){
$("#heading1").click(function(){
//when heading link is clicked, it toggles the section
$("#section1").toggle();
if(window.x.includes("1")){
//if x has a 1 in it, get rid of the 1
window.x = window.x.replace("1", "");
}
else{
window.x = window.x.concat("1"); //if x doesn't have a 1 in it, add a 1
}
window.x = window.x.replace("#_", ""); //remove multiple instances of #_ if there are any
y = "#_"
window.x = y.concat(window.x) // add #_ to the beginning of x
$('a[href]').each(function(){
var oldUrl = $(this).attr("href"); // set oldUrl to link above
if(oldUrl.includes("#_")){
oldUrl = oldUrl.replace("#_", "");
}
if(oldUrl.includes("1")){
oldUrl = oldUrl.replace("1", "");
}
var newUrl = oldUrl.concat(window.x); // for each link, concatenate it with x
$(this).attr("href", newUrl); // Set herf value
document.getElementById("heading1").href = window.x;
});
});
});
Gabriele Petrioli 在评论中修复了它。他说:
可能有些 a 标签没有 href。尝试使用 m = document.querySelectorAll("a[href]");