【问题标题】:How to change an <href> of an element in a <li> that's inside of a <div> using JS?如何使用 JS 更改 <div> 内部的 <li> 中元素的 <href>?
【发布时间】:2017-08-28 16:19:14
【问题描述】:

请帮助解决我的问题。 我是 JS 的新手,所以我不明白如何做到这一点:我需要替换以下字符串中的参数来自

<a href="javascript:PhotoUploadDialog.show(false, 'crop_moderation_split');" class="profile-gallery__item__link"></a>

<a href="javascript:PhotoUploadDialog.show(false, 'crop_split');" class="profile-gallery__item__link"></a>

使用 GreaseMonkey 脚本的现有页面。这是页面 HTML 代码本身的一部分:

<div class="profile-gallery-inner-wrapper">
        <ul class="profile-gallery js-photos-container">

            <!--Empty sections-->

            <li class="profile-gallery__item profile-gallery__item--no-image">
                <a href="javascript:PhotoUploadDialog.show(false, 'crop_moderation_split');" class="profile-gallery__item__link"></a>
            </li>)

        </ul>

        <!--Gallery navigation-->

    </div>

请帮我看看 JS 代码。

UPD。解决了这个问题。它现在运行。有点不像预期的那样,但它有效。

// ==UserScript==
// @name        Kismia
// @namespace   kismia.com
// @match       *://*kismia.com/*
// @require     https://code.jquery.com/jquery-3.1.0.min.js
// @version     1
// @grant       none
// ==/UserScript==

function ch_href () {

var a = document.querySelector('.profile-gallery__item__link');
if (a) {
a.setAttribute('href', 'javascript:PhotoUploadDialog.show\(false,     \'crop_split\'\)\;');
}
}
ch_href();

$(window).load (ch_href);

【问题讨论】:

  • 显示你尝试过的东西。

标签: javascript html replace href


【解决方案1】:

保持与您目前的代码尽可能接近,例如,您可以在 &lt;a&gt; 标签中添加一个 id 以便更容易识别它

<a id="myLink" href="javascript:PhotoUploadDialog.show(false, 'crop_moderation_split');" class="profile-gallery__item__link"></a>

<script>
function changeLink() {
    var link = document.getElementById("myLink");
    link.setAttribute('href', "javascript:PhotoUploadDialog.show(false, 'crop_split');");
}
</script>

它的工作方式是它使用getElementById 方法来获取确切的标签并将对它的引用存储在一个名为link 的变量中,然后您可以对其执行任何您希望的操作,例如setAttribute

但我很想为此采取不同的方法

<a href="#" onClick="doAction()" class="profile-gallery__item__link"></a>

<script>
var whichAction = 1;

function doAction() {
    switch (whichAction) {
        case 1:
        PhotoUploadDialog.show(false, 'crop_moderation_split');
        break;

        case 2:
        PhotoUploadDialog.show(false, 'crop_split');
        break;
    }
    return false;
}

function changeLink() {
    whichAction = 2;
}
</script>

这里发生了什么,您首先存储一个名为whichAction 的变量并将其设置为值1。当您单击该链接时,将调用一个名为doAction() 的函数,该函数查看值whichAction 并执行任何适当的任务。当然,如果您将来需要有更多选择,您可以在此处添加任意数量的案例。

现在您的 changeLink() 函数需要做的就是更改您的 whichAction 变量的值。

还有一点需要注意,在doAction()函数的末尾,你必须有return false;,这告诉浏览器不要继续跟踪href=属性中的链接。

【讨论】:

  • 不幸的是,我无法更改 HTML 代码中的任何内容,因为该页面不是我的,它来自 Internet 上的现有站点。我正在尝试使用 Stylish 插件对其进行更改。
  • 在问题中提及它可能是一个好主意,它非常相关
【解决方案2】:

由于&lt;li&gt; 元素具有profile-gallery__item 类,您可以这样做。

let anchor = document.getElementsByClassName("profile-gallery__item a")
anchor.setAttribute("href", "javascript:PhotoUploadDialog.show(false, 'crop_split');")

【讨论】:

  • 已经尝试过完全相同的代码。不幸的是,它不起作用。
  • 上面的变量list只引用了类名profile-gallery__item的第一个列表元素。究竟什么不起作用?您是否检查过该页面以查看该属性是否已设置?
  • 是的,当然我已经检查了该页面。我每次运行代码时都会这样做。没有任何反应,href 值不会改变。页面上有两个元素,我上面提到的那个是第一个。无论我尝试运行的 JS 代码的变体如何,它们都不会改变。
  • 要修改href的哪个元素?
【解决方案3】:

只需选择锚元素并更改属性。

const anchor = document.querySelector('.profile-gallery__item__link');
anchor.setAttribute('href', 'javascript:PhotoUploadDialog.show(false, 'crop_split');')

如果您需要更改多个链接的属性,您可以选择它们并在循环中执行此操作,如下所示:

const anchorAll = document.querySelectorAll('.profile-gallery__item__link');
for (let i = 0; i < anchorAll.lenght; i++) {
  anchorAll[i].setAttribute('href', "javascript:PhotoUploadDialog.show(false, 'crop_split');")}

【讨论】:

  • 是的,您在 jsfiddle 上的代码工作正常,但在真实页面上却不行。没有任何反应,href 的值没有改变。我还能尝试什么?
  • 请检查您放置代码的位置。将它放在
猜你喜欢
相关资源
最近更新 更多
热门标签