0

我有这个项目的jsfiddle。当小提琴设置为“onLoad”时,它会按原样删除元素。但是,当我将下拉菜单翻转为“不换行”时,它不起作用。我需要它“无包装”工作,因为我在维基百科上使用它,这就是他们加载脚本的方式。我的代码是:

$('span.mw-usertoollinks a:last').remove();
$('span.mw-usertoollinks').each(function() {
    this.innerHTML = this.innerHTML.replace(" | )", ")");
});

假设从以下位置删除块链接和之前|

<span class="mw-usertoollinks">
    (
    <a href="/UT:T13" class="mw-redirect" title="UT:T13">Talk</a>
     | 
    <a href="/S:Contributions/T13" title="S:Contributions/T13">contributions</a>
     | 
    <a href="/S:Block/T13" title="S:Block/T13">block</a>
    )
</span>

注意:我将 User_talk: 缩写为 UT: 和 Special: 缩写为 S: 以使其更适合代码框。其他都是原创的。

4

1 回答 1

2

它在外部不起作用,onload因为您尝试选择的 DOM 元素在代码运行时不存在。幸运的是,你可以像这样在 jQuery 中包装你的代码:

$(function() {
    // your code here
});

它只会DOM 加载后运行。

这是一个小提琴

请注意,这$(function(){...});$(document).ready(function(){...});. 您正在做的是附加代码以仅在触发 document.ready 事件后运行(即在 DOM 完全加载后)。

更新

从技术上讲,这是另一个问题,但这应该对您有用:

$(function() {
    $('span.mw-usertoollinks').each(function () {
        var $elem = $(this);
        $elem.children('a:last').replaceWith("-");
        $elem.html($elem.html().replace(" | -", ""));
    });
 });

请注意,当您使用 时$.each,即使使用 jQuery 选择器,您也正在迭代 DOM 节点的集合,而不是 jQuery 对象。所以this需要像这样转换成一个jQuery对象:$(this)才能使用jQuery函数就可以了。我正在缓存生成的 jQuery 对象,$elem以避免必须不断重新创建它。

我们使用children选择器来选择子节点以a:last仅选择最后一个a链接。然后我们使用.html()来操作 的内容$elem并移除尾随字符。

于 2013-03-21T18:24:24.237 回答