javascript - 关于 DOM manip 和 GreaseMonkey 的一点帮助

标签 javascript twitter greasemonkey

我不是一个 JS 人,所以我有点在黑暗中跌跌撞撞。基本上,我想要的东西可以在特定用户的页面上为该用户添加 Twitter 搜索 @replies 的链接。

我想弄清楚两件事:

  1. 如何从页面中提取用户名,以便构建正确的 URL。 IE。如果我在 http://twitter.com/ev ,我应该找回“ev”。
  2. 如何操纵 DOM 将内容插入到正确的位置

这是我要定位的 HTML 片段:

<ul id="tabMenu">
  <li>
    <a href="/ev" id="updates_tab">Updates</a>  </li>
  <li>
    <a href="/ev/favourites" id="favorites_tab">Favorites</a>  </li>
  </ul>

这是脚本(到目前为止):

// ==UserScript==
// @name         Twitter Replies Search
// @namespace    http://jauderho.com/
// @description  Find all the replies for a particular user
// @include      http://twitter.com/*
// @include      https://twitter.com/*
// @exclude      http://twitter.com/home
// @exclude      https://twitter.com/home
// @author       Jauder Ho
// ==/UserScript==

var menuNode = document.getElementById('tabMenu');
if (typeof(menuNode) != "undefined" && menuNode != null)
{
    var html = [];
    html[html.length] = '<li>';
    html[html.length] = '<a href="http://search.twitter.com/search?q=to:ev" class="section-links" id="replies_search_tab">@Replies Search</a>';
    html[html.length] = '</li>';

    // this is obviously wrong
        var div = document.createElement('div');
    div.className = 'section last';
    div.innerHTML = html.join('');
    followingNode = menuNode.parentNode;
    followingNode.parentNode.insertBefore(div, followingNode);
}

最佳答案

这是上面的纯 DOM 方法 - 为了好玩,我还尝试了用户名的提取:

var menuNode = document.getElementById('tabMenu');
if (menuNode!=null)
{
    // extract username from URL; matches /ev and /ev/favourites
    var username = document.location.pathname.split("/")[1];

    // create the link
    var link = document.createElement('a');
    link.setAttribute('href', 'http://search.twitter.com/search?q=to:'+username);
    link.setAttribute('id', 'replies_search_tab');
    link.appendChild(document.createTextNode('@Replies Search'));

    // create the list element
    var li = document.createElement('li');

    // add link to the proper location
    li.appendChild(link);
    menuNode.appendChild(li);    
}

这相当于(基于原始代码片段):

  <ul id="tabMenu">
  <li>
    <a href="/ev" id="updates_tab">Updates</a>  </li>
  <li>
    <a href="/ev/favourites" id="favorites_tab">Favorites</a>  </li>
  <li>
    <a href="http://search.twitter.com/search?q=to:ev" id="replies_search_tab">@Replies Search</a></li>
  </ul>

如果您希望添加的链接显示在不同的位置,则需要稍微调整一下 insertBefore

PS。冒昧地忽略了“section-links”类,因为它是 x 关注者、y 关注者、z 更新链接的格式。

关于javascript - 关于 DOM manip 和 GreaseMonkey 的一点帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/365028/

相关文章:

javascript - Jquery $.get() 和 $.ajax() 没有得到相同的结果

search - Twitter:标签搜索查询

php - <b> fatal error </b> : Uncaught exception 'Exception' with message 'Failed to connect to api.twitter.com port 443: Connection timed out'

php - Twitter Oauth 通过 PHP WITHOUT cURL

javascript - 我非常简单的Greasemonkey脚本未运行?

javascript - 使用 Greasemonkey 删除列表元素

javascript - 重置为下拉菜单中的未绑定(bind)选项

javascript - iFrame 在 Chrome 中不工作(在 FF、IE 和 Safari 中工作正常)

javascript - 我可以用什么来代替 app.use(express.bodyParser());

javascript - 向每个 <span class> 添加一个 div (Greasemonkey)