【问题标题】:How do I add custom anchor links with onclick?如何使用 onclick 添加自定义锚链接?
【发布时间】:2013-11-16 00:11:26
【问题描述】:

我想使用 Greasemonkey 向页面添加新的锚链接。具体来说,我想添加自定义笑脸,这样我就不必每次都找到笑脸图像并将链接复制并粘贴到[img] 标签中。

我要添加的代码是这样的

<a href="#" onclick="insert_text(':D', true); return false;">
    <img src="./images/smilies/icon_e_biggrin.gif" alt=":D" title="Very Happy" height="17" width="15">
</a>

但我想将 img src 位置和 onclick 更改为类似

insert_text('[img]imagesourcelocation[/img]' ,true) return false; 

[img] 来源与图片网址相同。
我希望能够随着时间的推移添加许多笑脸——更改 alttitle 属性也很好,但我主要需要另外两个。

我该怎么做?
到目前为止,我只有这个:

var para=document.createElement("a");
var node=document.createTextNode("This is new.");
para.appendChild(node);

var element=document.getElementById("smiley-box");
element.appendChild(para);

如您所见,我需要将这个新笑脸添加到 ID 为 smiley-box&lt;div&gt;

如果有人能帮我做这件事,我会很高兴。

【问题讨论】:

  • 你有一个空格document.createElement("a ");,锚也需要一个href,例如:para.href = '#'
  • 这很有帮助,因为我不知道如何用 js 改变这一切,如果你能给我一个如何添加锚的例子,就像我展示的第一个代码一样,我可以根据自己的喜好编辑它很棒

标签: javascript html hyperlink anchor greasemonkey


【解决方案1】:

您可以通过访问它们的属性来设置 DOM 元素对象的属性,例如设置href:

para.href = "#";

设置 onclick 有点不同 - 不是给它一个 Javascript 字符串,而是给它一个函数:

para.onclick = function() {
    insert_text('[img]imagesourcelocation[/img]' ,true);
    return false;
}

要在链接中实现图片,只需创建一个 img 元素而不是文本节点,像上面一样设置它的属性,然后将其添加到链接中:

// create the img and set it's src
var node=document.createElement("img");
node.src = "http://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Smiley.png/50px-Smiley.png"

// add the img to the anchor
para.appendChild(node);

这里的工作示例:http://jsfiddle.net/d2gGR/

参考资料:

http://www.w3schools.com/jsref/dom_obj_anchor.asp
http://www.w3schools.com/jsref/dom_obj_image.asp
http://www.w3schools.com/jsref/dom_obj_event.asp

【讨论】:

  • 感谢这帮助我理解了我刚刚认为我可以做一些不好的事情的基础知识,我对我所做的事情发表了我的回答。非常感谢
【解决方案2】:

不确定这是否是油钱方式,但您也可以直接更新笑脸框的 innerHTML

function add(url, alt, title)
{
    var box=document.getElementById("smiley-box");
    box.innerHTML += "<a href=\"#\" onclick=\"insert_text('[img]" + url + 
                     "[/img]', true); return false;\"><img src=\"" + url + 
                     "\" alt=\"" + alt + "\" title=\"" + title + "\" height=\"17\" width=\"15\"></a>";
}

然后您可以像这样将笑脸添加到框中(链接、替代文本和标题文本):

add("http://bit.ly/1a4xaTX",":D","Big grin");
add("http://bit.ly/HDGdlw",":(","Sad");
add("http://bit.ly/175LywW",":O","Surprised");

jingtao 的解决方案倒是不错。

【讨论】:

【解决方案3】:

这是一个完整的脚本,它使用jQuery 的强大功能添加自定义表情符号。请注意,它避免了编写脚本的 3 个致命罪过:

  1. 它避免了"cut and paste (and cry)" coding
  2. 它以强大的 web 2.0 方式使用事件处理程序。 (切勿使用onclick。)
  3. 它不会丢弃innerHTML 的现有元素。

此外,如果需要,使用waitForKeyElements() 可以很容易地使这段代码支持 AJAX。


// ==UserScript==
// @name     _Add custom smilies
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/
$("#smiley-box").append ('<p>Custom smileys.</p>');

addNewSmiley ("http://sguwars.com/forum/images/smilies/icon_cool.gif");

function addNewSmiley (imageURL) {
    $("#smiley-box").append (
        '<a href="#" class="gmCustomSmilies">'
        + '<img src="' + imageURL + '"></a>'
    );
}

//-- Activate click handlers for any and all of our custom smilies
$(document.body).on ("click", "a.gmCustomSmilies", insertSmilie);

function insertSmilie (evnt) {
    var jThis   = $(evnt.target);
    var imgURL  = jThis.find ("img").attr ("src");

    unsafeWindow.insert_text ('[img]' + imgURL + '[/img]', true);
    return false;
}

【讨论】:

    【解决方案4】:
    var para=document.createElement("p");
    var node=document.createTextNode("custom smileys.");
    para.appendChild(node);
    links = document.createElement('a');
    links.setAttribute('href','#');
    links.setAttribute('onclick','insert_text(\'[img]http://sguwars.com/forum/images/smilies/icon_cool.gif[/img]\', true); return false;');
    links.innerHTML ='<a href="we.html"><img src="http://sguwars.com/forum/images/smilies/icon_cool.gif" /></a>';
    var element=document.getElementById("smiley-box");
    
    element.appendChild(para);
    element.appendChild(links);
    

    这是我目前的解决方案,谢谢

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多