Как «процитировать» строку в jQuery?

0

Info: У меня есть код javascript, который я покажу ниже, у кого проблема с кавычками.

html = [];
style = 'class=odd';
html.push('<li '+style+' onclick=SelectItem("'+ele.id+'","'+idItem+'","'+dsItem+'","'+qtItem+'"); >'+id+' - '+$iObjItensListaVenda.result.ds_item[i]+'</li>');

У меня есть строки, которые я получаю от объекта JSON, как вы видите выше.

Проблема. Но когда я пытаюсь разместить его как параметр функции в событии onClick элемента <li>, мой полученный элемент html <li> становится полностью неформатированным следующим образом:

<li natural,"150");="" white="" american="" onclick="SelectItem("descItem1","2",TELHA" class="odd">00002 - TELHA AMERICAN WHITE NATURAL</li>

Что мне нужно: мне нужно решение вроде функции, возможно, уже существует в jQuery, для Quote my String. Как QuoteStr("string"); стать ""string"".

Может быть, вы жалуетесь:

  1. Переменная ele является элементом html <input>.
  2. Идентификатор переменной idItem содержит только числа, они поступают из объекта JSON.
  3. Переменная dsItem собой строку, содержащую описание элемента, она также поступает из объекта JSON.
  4. Переменная qtItem содержит только числа, это количество элементов, оно также поступает из JSON.
  • 0
    onclick = 'SelectItem ("desc ...", "we ..")';
  • 0
    Вот подробный ответ, который касается экранирования кавычек: stackoverflow.com/a/9756789/470480
Показать ещё 4 комментария
Теги:
quotes

4 ответа

2

Разумным решением было бы использовать jQuery для создания элемента и привязки обработчика события, а не построения строки HTML:

var $li = $('<li />', {
    "class": "odd",
    on: {
       click: function() {
           SelectItem(ele.id, idItem, dsItem, qtItem);
       }
    },
    text: id + ' - ' + $iObjItensListaVenda.result.ds_item[i]
});

Если вы делаете это в цикле, а переменные в конечном итоге имеют неправильные значения, см. JavaScript закрытия внутри циклов - простой практический пример. Альтернативой вы можете использовать jQuery .data API для установки и получения этих значений.

  • 0
    Как я могу реализовать этот метод, когда мне нужно добавить много <li> к желаемому <ul> ? в настоящее время я использую массив для хранения всех <li> внутри цикла, а затем использую document.getElementById('my_div').innerHTML = array.join(''); положить его внутри ул.
  • 0
    Вы можете использовать метод japu .append : api.jquery.com/append
Показать ещё 11 комментариев
0

Попробуйте \" вместо ' в onClick

$(".container").append("<a href='javascript:void(0)' onClick=\"showField('"+data.name+"','"+data.text+"');\">Edit</a>");
  • 0
    попробовал и безуспешно: /
0

Вы всегда можете использовать обратную косую черту, чтобы избежать кавычек:

console.log('te\'st'); // te'st
console.log("te\"st"); // te"st

Вы можете сделать то же самое для своей строки, но я бы предложил вам переписать все это в нечто более пригодное для использования. Под этим я подразумеваю не использование строк для создания объектов, а создание объектов напрямую.

Например:

var li = document.createElement('li');
li.className = myClass;
li.onclick = function(){/*...*/};

С jQuery становится еще проще.

  • 0
    Обратите внимание, что это не будет работать для кавычек внутри значений атрибутов.
  • 0
    @KevinB Атрибуты кажутся неправильными, даже когда они впервые исходят из JSON ... Однако мой ответ был о том, как исправить часть onclick ... там много беспорядка. Но я бы действительно все переписал.
0

Вы можете использовать кавычки в строке, экранируя их с помощью обратной косой черты.

var text = "s t r i n g";
"\"" + text + "\"" === "\"s t r i n g\"";

Источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

Ещё вопросы

Сообщество Overcoder
Наверх
Меню