Как заставить эти вложенные кавычки работать в Javascript? - PullRequest
0 голосов
/ 18 марта 2012

Я пытаюсь внедрить некоторый код Javascript в веб-страницу, используя Greasemonkey. Сначала я начну с того, что работает.

var script = document.createElement( 'script' );
script.src = "http://code.jquery.com/jquery.min.js";
$("#navHome").append( script );

var buttonCode ='<input type="button" value="Make public" onclick="var selector=\'div.timelineTimestamp\'; $(selector).each(function() { var textToAppend=\' <input type=\\\'button\\\' value=\\\'Make Public\\\' > \'; $(this).append(textToAppend) });">'


$("#navHome").append(buttonCode);

Я пытаюсь изменить строку для buttonCode, чтобы при нажатии кнопки отображалось предупреждение. Но чтобы вставить предупреждающее сообщение, мне нужно уйти еще на один уровень вниз в кавычках, и я не могу найти способ заставить его работать.

Закрытие я могу заставить его работать, вставив следующее

onclick=\\\'alert(\\\\\'hi\\\\\')\\\' 

но это все еще не работает. Как это можно сделать?

Ответы [ 4 ]

2 голосов
/ 18 марта 2012

У вас уже есть jQuery в вашем скрипте с директивой @require, иначе $("#navHome").append( script ); не будет работать.

Так что не вставляйте jQuery в целевую страницу.Держите все в песочнице.Это будет работать быстрее с меньшим количеством осложнений.Потеряйте всю эту <script> часть и просто используйте:

$("#navHome").append ('<button id="makePublicBtn">Make public</button>');

$("#makePublicBtn").click ( function () {
    var selector    = 'div.timelineTimestamp';
    $(selector).each (function () {
        var textToAppend    ='<input type="button" value="Make Public">';
        $(this).append (textToAppend);
    } );
} );

Примечание: используйте <button> для кнопки, если только она не является частью формы и вы хотите, чтобы значение было передано.

2 голосов
/ 18 марта 2012

Вместо этого вы должны попытаться построить свои элементы, используя jQuery, например:

$("#navHome").append($("<script />").attr("src", "http://code.jquery.com/jquery.min.js"));

var buttonCallback = function() {
    // your callback code goes here...
};

$("#navHome").append($("<input />").attr("type", "button").val("Make public").bind("click", buttonCallback));
0 голосов
/ 18 марта 2012
var script = document.createElement( 'script' );
script.src = "http://code.jquery.com/jquery.min.js";




$("#navHome").append( script );

var buttonCode ="<input type=\"button\" id=\"btnID\" value=\"Make public\" >"; 


$("#navHome").append(buttonCode);

$('#btnID').live('click',function(){  // get click event on dynamically created element
    $('div.timelineTimestamp').each(function() { 
        var textToAppend= "<input type=\"button\" value=\"Make Public\" > "; 
        $(this).append(textToAppend) ;
        });
});
0 голосов
/ 18 марта 2012
var buttonCode ="<input type=\"button\" value=\"Make public\" onclick=\"var selector='div.timelineTimestamp'; $(selector).each(function() { var textToAppend=' <input type=\"button\" value=\"Make Public\" > '; $(this).append(textToAppend) });\">";

обратите внимание, где в начале и конце объявления var я заменил 'на ", а внутри объявления я добавил \"

...