我有一个jsfiddle这个项目。当小提琴设置为“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:to S:使其更适合代码框。其他一切都是原创的。
答案 0 :(得分:2)
它不在onload
之外工作,因为代码运行时您尝试选择的DOM元素不存在。幸运的是,你可以在jQuery中包装这样的代码:
$(function() {
// your code here
});
在加载DOM之后,它只会运行。
这是fiddle
请注意,$(function(){...});
是$(document).ready(function(){...});
的简写。你正在做的是附加代码只有在document.ready事件被触发后才会运行(即在DOM完全加载之后)。
<强>更新强>
从技术上讲,这是另一个问题,但this应该对您有用:
$(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
的内容并删除尾随字符。