如何在动态生成的页面上运行选择器?

时间:2016-02-01 20:15:57

标签: jquery ajax google-chrome tampermonkey

我有一个在GM_addStyle但不在jQuery中的选择器。我想使用CSS3中没有的jQuery :contains()

但是,当我查看源代码时,我的页面上似乎不存在该ID,但它是动态生成的 在整个页面加载后如何告诉Tampermonkey运行JS?

我尝试了不同的JS @run-at设置,但没有运气。

//works
GM_addStyle(" \
   #T301444200 > tbody > tr.SelPrimary > td:nth-child(1) > nobr > span{ color: red; } \
");

//does not work
$("#T301444200 > tbody > tr.SelPrimary > td:nth-child(1) > nobr > span").css("color","blue","important");

2 个答案:

答案 0 :(得分:0)

有时你可以等待窗口load事件,但一般来说,你必须使用支持AJAX的技术。请参阅Fire Greasemonkey script on AJAX request

因此,使用waitForKeyElements(),完整的Tampermonkey脚本就像:

// ==UserScript==
// @name     _Use jQuery on AJAXed content
// @match    http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
//- The @grant directive is needed to restore the proper sandbox.

waitForKeyElements (
    "#T301444200 > tbody > tr.SelPrimary > td:nth-child(1) > nobr > span", styleNode
);

function styleNode (jNode) {
    jNode.css ("color", "blue");
}

请注意.css("color","blue","important");not valid jQuery,在这种情况下可能不需要。

如果这是您 需要!important的罕见网站之一,请使用:

jNode[0].style.setProperty ("color", "blue", "important");

styleNode()内,上面。

答案 1 :(得分:0)

Waiting for the element

function waitForElement(id, callback, timeout){
    if('undefined' == typeof timeout) timeout = 30;
    timeout = timeout * 1000;
    var time = 0;
    var poops = setInterval(function(){
        if(time >= timeout) clearInterval(poops);
        if(document.getElementById(id)){
            clearInterval(poops);
            callback();
        }
        time += 100;
    }, 100);
}

One way to include jQuery

(function(callback) {
  var script = document.createElement("script");
  script.setAttribute("src", "//code.jquery.com/jquery-1.11.3.min.js");
  script.addEventListener('load', callback);
  document.body.appendChild(script);
})

// main codez go in here
(function(){
  window.alert($('a').length+" Links");
});