你好,这是我的 JavaScript 代码:
window.onload = function () {
function hideAds() {
setTimeout(hide, 2000);
}
function hide() {
var ads = document.querySelector(".ads");
ads.style.marginTop = (-ads.offsetHeight) + "px";
}
function reveal() {
ads.style.marginTop = "";
hideAds();
}
var ads = document.querySelector(".ads");
ads.addEventListener("click", reveal, true);
hideAds();
}
Run Code Online (Sandbox Code Playgroud)
从这段代码来看,除了“ads.addEventListener”倒数第二行之外,一切正常。是什么原因?我在这里做错了什么吗..?
我需要通过单击添加的广告类 div 来调用我的 Reveal 函数。
有人帮助我吗?
所以基本上我想选择具有特定子元素的元素。现在我有选择器来选择链的子元素:
const el = document.querySelector('#leftMenu ul > li > a:not(.active) + ul > li.active')
Run Code Online (Sandbox Code Playgroud)
现在要获取我感兴趣的元素,我必须这样做:
const x = el.parentNode.parentNode;
Run Code Online (Sandbox Code Playgroud)
有什么方法可以直接从选择器本身获取这个元素吗?
我正在尝试使用该querySelectorAll()方法来获取网页中的链接,但我想忽略以"javascript:"开头的链接或使用其他协议,例如"itpc://"
有没有办法将这些包含在"not()"伪选择器中?
document.querySelectorAll("a:not([href^=javascript]):not([href^=itpc])"); //works
document.querySelectorAll("a:not([href^=javascript:]):not([href^=itpc://])"); //doesn't work
Run Code Online (Sandbox Code Playgroud)
即使第一种方法在当前页面上工作正常,也无法保证它将在我将使用它的每个页面上都能正常工作,所以我真的希望能够检测到该冒号.
是否有某个页面显示当前浏览器对Selectors API的支持?
querySelector()undefined string尝试访问numeric value as the ID元素时返回.我想用querySelector()别人的方法,因为它更灵活.任何解决这个问题的方法都会有很大的帮助.
var foo = document.querySelector('#1');
console.log(foo);
Run Code Online (Sandbox Code Playgroud)
假设我有一个基于any的DOM元素数组 selector
var elems = document.querySelectorAll(selector);
Run Code Online (Sandbox Code Playgroud)
我不知道包含了什么elems,但让我们假设elems.length > 0
我想使用querySelectorAll(或一些等效函数)elems来查找与其他选择器匹配的所有元素.
// example: find all buttons with class `foo` within `elems` array
var buttons = elems.querySelectorAll("button.foo");
Run Code Online (Sandbox Code Playgroud)
这不起作用(显而易见的原因),但我不确定如何做到这一点:(
这是我创建的包装器,用于处理@Tibos接受的答案
// Element.matches wrapper
(function(e){
if (typeof e.matches !== "function") {
e.matches = e.webkitMatchesSelector ||
e.mozMatchesSelector ||
e.msMatchesSelector ||
e.oMatchesSelector ||
e.matchesSelector;
}
})(Element.prototype);
Run Code Online (Sandbox Code Playgroud) 我正在编写一个站点刮板来从ajax站点获取一些特定内容而没有实际链接,只有可点击的文本.我现在只使用javascript大约一个星期,并且正在使用CasperJS,因为它会减少很多工作.
我发现的问题是我正在编写多个函数,它们都做同样的事情,只是根据它所在的页面搜索不同的链接.所以我有:
function getLinks() {
var links = document.querySelectorAll('div.AjaxLink h3');
return Array.prototype.map.call(links, function(link) {
return link.innerText;
});
}
Run Code Online (Sandbox Code Playgroud)
它的运行方式是:
casper.then(function() {
var myLinks = this.evaulate(getLinks);
/* ... link manipulation code code ... */
});
Run Code Online (Sandbox Code Playgroud)
这很好用.我显然不希望有六个函数只有一个不同的查询字符串.所以我想做的是:
function getLinks(findText) {
var links = document.querySelectorAll(findText);
return Array.prototype.map.call(links, function(link) {
return link.innerText;
});
}
Run Code Online (Sandbox Code Playgroud)
然后我试图通过以下方式运行它:
casper.then(function() {
var myLinks = getLinks('div.AjaxLink h3');
/* ... link manipulation code code ... */
});
Run Code Online (Sandbox Code Playgroud)
findText变量正确传入但看起来查询选择器总是返回一个空的NodeList.
我究竟做错了什么?是记录该函数内部创建了一个空文件?
我有一些文本输入,我希望它们在点击时的宽度为500px.
var inputs = document.querySelectorAll("input[type=text]")
for(i=0; i<inputs.length; i++){
inputs[i].onclick = function(){
inputs[i].style.width = "500px";
}
}Run Code Online (Sandbox Code Playgroud)
<input type="text" id="sometext">Run Code Online (Sandbox Code Playgroud)
在Chrome控制台上,我在下一行中收到"无法读取未定义的属性'样式":inputs[i].style.width = "500px";当我点击输入时.
我该如何修复我的代码?
我想得到一个非常长的html表(随机长度)的整列的所有innerText.我正在使用此代码:
var tbEls = document.querySelectorAll('#tBodyID tr td:nth-child(cidx)');
Run Code Online (Sandbox Code Playgroud)
其中cidx =列索引我想从中提取内容.
但是这样的代码提取了所有的td元素(当然在其中包含innerText).但它并没有直接提取其中的所有innerText.因此我必须使用for循环重新处理返回的tdEls数组,以从每个tbEls [i]元素中提取其自己的innerText.它有效但......
我的问题是:
在纯JS(没有外部库或框架)中,可以使用更直接的方法改进某种方式,只有 querySelectorAll参数一次性('#tBodyID tr td:nth-child(cidx)')直接获取所有td元素innerText并且只需一个javascript语句而无需重新处理带有for循环或其他任何东西的返回数组?
换句话说,是否有某种innerText选择器可以用来一次性获取它们而不需要任何额外的循环?
如果老浏览器无法识别它就没问题,我很抱歉.
我希望实现的是:
var arrTblColInnerText = document.querySelectorAll('#tBodyID tr td:nth-child(cidx):alltd:innerText');
Run Code Online (Sandbox Code Playgroud)
我想得到一个类似于的数组:
0: value from column cidx cell 0
1: value from column cidx cell 1
2: value from column cidx cell 2
3: value from column cidx cell 3
...
n: value from column cidx cell n
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我使用以下代码运行了一些 JS 代码来选择多个节点中的第一个。
querySelectorAll()[0]
Run Code Online (Sandbox Code Playgroud)
以下不是在做完全相同的事情吗?
querySelector()
Run Code Online (Sandbox Code Playgroud)
使用有优势querySelectorAll()[0]吗?