blackantt 发表于 2023-6-12 08:23:40

有没有办法指定js的作用范围?

用了一个js,但它会把我的ruby-rt(my)码搞乱。有没有办法给这个js指定一个作用范围,让js忽略ruby(my)码
<html>
<body>

我的ruby码, <ruby class="my">...</ruby>

<ruby> ..... </ruby>

<script src="//mpot.com/static/mpot.min.js" charset="UTF-8"></script>



</body>
</html>

isdkz 发表于 2023-6-12 09:38:40

在JavaScript中,作用范围是由代码的位置以及如何被声明决定的。你不能指定JavaScript脚本只在HTML的某部分起作用,但你可以限制JavaScript操作的HTML元素。

如果你的JavaScript脚本正在干扰你的Ruby标签,你需要检查该脚本的源代码。你可能需要在JavaScript中进行一些修改,以确保它不会干扰你的Ruby标签。你可以通过限制脚本操作的元素选择器来实现这个目标。

比如说,如果你的脚本在所有的<ruby>标签上都有操作,你可以修改它只在没有.my类的<ruby>标签上起作用。在jQuery中,这可以通过以下方式实现:

$("ruby:not(.my)").each(function() {
// 操作代码
});


在纯JavaScript中,这可以通过以下方式实现:

document.querySelectorAll("ruby:not(.my)").forEach(function(elem) {
// 操作代码
});


以上的代码片段会查找所有不包含.my类的<ruby>标签,并对它们进行操作。这样,你的<ruby class="my">标签就不会被JavaScript代码干扰。

请注意,这需要你能够修改mpot.min.js脚本的源代码,如果你不能修改,那你就需要联系脚本的提供者,看看他们是否可以为你提供一种方法,来避免干扰你的Ruby标签。

希望这个回答对你有所帮助。如果你还有其他问题,欢迎继续提问。

blackantt 发表于 2023-6-12 11:25:10

isdkz 发表于 2023-6-12 09:38
在JavaScript中,作用范围是由代码的位置以及如何被声明决定的。你不能指定JavaScript脚本只在HTML的某部分 ...

是纯 javaScript,用
document.querySelectorAll("ruby:not(.my)").forEach(function(elem) {
// 操作代码
});
不管用。
但我用你的指点,修改js里的ruby, rt, rb加入:not(.my)后生效。

但外层套壳的方法很方便, 想尽量用套壳的方法, 我把原js不动替换掉你的 ”// 操作代码“ 后,哪里还得改呢?原js里有很多funtion.是要具体到某funtion吗?

isdkz 发表于 2023-6-12 12:16:24

blackantt 发表于 2023-6-12 11:25
是纯 javaScript,用
document.querySelectorAll("ruby:not(.my)").forEach(function(elem) {
// 操 ...

对的,你需要找到在原始JavaScript代码中具体的操作 <ruby> 标签的地方。通常,这种操作是通过选择器(如 document.querySelector 或 document.querySelectorAll )或者通过某些库(如jQuery)的选择器实现的。

你需要对每个影响 <ruby> 标签的函数进行检查,看看是否在选择 <ruby> 标签时可以加上 :not(.my) 选择器。举个例子,如果原代码是这样的:

document.querySelectorAll('ruby').forEach(function(elem) {
// 操作代码
});


你可以修改为:

document.querySelectorAll('ruby:not(.my)').forEach(function(elem) {
// 操作代码
});


只有当原始的JavaScript代码使用了选择器去选取 <ruby> 标签,并且进行了操作(如修改属性,添加事件监听器等),那么这种修改才能生效。

我需要强调的是,这个解决方案依赖于你能够修改和理解原始的JavaScript代码。如果原始代码太复杂或者不可修改,那么你可能需要寻找其他方法,例如:联系代码的作者,或者在代码运行前先把带有 .my 类的 <ruby> 标签暂时移出DOM,在代码运行后再插回去等等。
页: [1]
查看完整版本: 有没有办法指定js的作用范围?