标签: selectors-api

javascript addEventListener by querySelector 不起作用

你好,这是我的 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 函数。

有人帮助我吗?

javascript debugging addeventlistener selectors-api

5
推荐指数
1
解决办法
7360
查看次数

具有特定子元素的查询选择器

所以基本上我想选择具有特定子元素的元素。现在我有选择器来选择链的子元素:

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)

有什么方法可以直接从选择器本身获取这个元素吗?

javascript css-selectors selectors-api

5
推荐指数
1
解决办法
3886
查看次数

在querySelectorAll()中使用冒号

我正在尝试使用该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)

即使第一种方法在当前页面上工作正常,也无法保证它将在我将使用它的每个页面上都能正常工作,所以我真的希望能够检测到该冒号.

javascript css css-selectors css3 selectors-api

4
推荐指数
1
解决办法
3176
查看次数

4
推荐指数
1
解决办法
660
查看次数

在尝试访问数值作为元素的ID时,querySelector返回未定义的字符串

querySelector()undefined string尝试访问numeric value as the ID元素时返回.我想用querySelector()别人的方法,因为它更灵活.任何解决这个问题的方法都会有很大的帮助.

var foo = document.querySelector('#1');
console.log(foo);
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

javascript jquery selectors-api

4
推荐指数
1
解决办法
4485
查看次数

是否可以在元素数组上使用querySelectorAll?

假设我有一个基于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)

javascript dom selectors-api

4
推荐指数
1
解决办法
2144
查看次数

函数中的CasperJS querySelectorAll(变量)不返回任何结果

我正在编写一个站点刮板来从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.

我究竟做错了什么?是记录该函数内部创建了一个空文件?

javascript selectors-api phantomjs casperjs

4
推荐指数
1
解决办法
1122
查看次数

QuerySelectorAll不使用onclick事件

脚本

我有一些文本输入,我希望它们在点击时的宽度为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";当我点击输入时.

我的问题

我该如何修复我的代码?

javascript selectors-api

4
推荐指数
1
解决办法
1万
查看次数

document.querySelectorAll一次性获取所有选定元素的innerText纯javascript

我想得到一个非常长的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)

提前致谢.

elements innertext selectors-api

4
推荐指数
2
解决办法
2243
查看次数

querySelector() 和 querySelectorAll()[0] 的区别

我使用以下代码运行了一些 JS 代码来选择多个节点中的第一个。

querySelectorAll()[0]
Run Code Online (Sandbox Code Playgroud)

以下不是在做完全相同的事情吗?

querySelector()
Run Code Online (Sandbox Code Playgroud)

使用有优势querySelectorAll()[0]吗?

javascript selectors-api

4
推荐指数
1
解决办法
840
查看次数