我为这个项目准备了一个jsfiddle。当fiddle被设置为"onLoad"时,它会删除元素。但是,当我将下拉菜单切换到"no wrap - in"时,它不起作用。我需要它的工作"没有包裹",因为我在维基百科上使用它,这就是他们如何加载他们的脚本。我的代码是:
$('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:,以使其更适合代码框。
在onload
之外不工作,因为您试图选择的DOM元素在代码运行时不存在。幸运的是,您可以像这样在jQuery中包装代码:
$(function() {
// your code here
});
并且在 DOM加载完成后,它只会运行
Here's a fiddle
注意$(function(){...});
是$(document).ready(function(){...});
的简写。您所做的是附加只在文档中运行一次的代码。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
的内容并删除尾随字符。