jQuery在控制台中工作,但不在.js文件

时间:2017-11-09 22:19:58

标签: javascript jquery html tampermonkey

$('ul#test a').click(function(){
 $('this').closest('parent').find('textarea').val(this.getAttribute('href'));   
});

适用于Google Chrome代码段,但未加载Tampermonkey 我认为它甚至试图在找到目标之前设置一个值

(编辑) 整个剧本:

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        www.reddit.com/r/some-subreddit
// @grant        none
// ==/UserScript==

(function() {
  'use strict';

  $( "textarea" ).one("click",(function() {
    $(".usertext-edit").prepend ( `
    <div id="gmSomeID"><ul id="gmSomeeID"><a href="#stickers1"</a> <a href="#stickers2"</a> <a href="#stickers3"</a> <a href="#stickers4"</a> <a href="#stickers5"</a ><a href="#stickers6"</a> <a href="#stickers7"</a> <a href="#stickers1"</a> <a href="#stickers2"</a> <a href="#stickers3"</a> <a href="#stickers4"</a> <a href="#stickers5"</a> <a href="#stickers6"</a>
</ul></div>
    ` );
    $('ul#gmSomeeID').css({
      'overflow-y':'scroll',
      'display':'block',
      'overflow-wrap' : 'normal',
      'height':'100px',
      'background-color':'white'
    });

    $('ul#gmSomeeID a').click(function(){
      $("this").closest("div.usertext-edit")
        .find("textarea")
        .val($("this")
        .closest("div.usertext-edit")
        .find("textarea")
        .val() +' '+ '[](' + this.getAttribute('href') + ') ');
    });
  }));
})();  

它会在textarea上面显示一些图片,我试图让它们在点击时将它们插入到所述文本区域中

2 个答案:

答案 0 :(得分:1)

将代码放在ready函数中,这样事件就会在选择器中找到元素,因为它将在DOM完全加载后执行:

$(function(){
   //Your code here
})

还要尝试事件委派:

$(function(){
    $('body').on('click', '#test a', function(){
        $(this).closest('parent').find('textarea').val( $(this).attr('href') );
    });  
});

注1:代码在控制台中有效,因为DOM已完全加载。 注2: $('this')应为$(this)而不是&amp;最好使用$(this).attr('href')而不是this.getAttribute('href')

希望这有帮助。

答案 1 :(得分:0)

当你在控制台中尝试代码时,DOM已经完成了构建。如果你已经显示了代码,那么在文件中的所有HTML之前,它将尝试在元素被解析到内存之前找到元素。

将代码放在document.ready handler:

$(function(){
  $('ul#test a').click(function(){
   $('this').closest('parent').find('textarea').val(this.getAttribute('href')); 
  });
});