Почему jQuery ставит равные пробелы, когда я пытаюсь добавить некоторую строку

У меня есть эта строка:

var strAppend  = "<button id='btnUEN' class='k-primary' onclick='getCategoryByUEN(" + stronClick +  ")'>"+ name +" </button>"
$("#nav_clacom_1474").append(strAppend);

Я поставил console.info к strAppend, и у меня есть это значение:

<button id='btnUEN' class='k-primary' onclick='getCategoriaByUEN('1','TEST AND TEST')'>TEST AND TEST</button>

Но код HTML выглядит не очень хорошо... покажите это:

<button id='btnUEN' class='k-primary' onclick='getCategoriaByUEN('1','TEST' = "" AND = "" TEST')' = "">TEST AND TEST</button>

Почему и как я могу решить эту...

Вы неправильно избегаете своих кавычек

Taplar 30.05.2019 19:59

Совет: одинарные кавычки для JS, двойные для HTML. Никогда больше не занимайтесь этим вопросом.

isherwood 30.05.2019 20:06

@isherwood Учитывая, что у них есть встроенные привязки, независимо от того, использовали ли вы одинарные или двойные кавычки в строке, в какой-то момент вам придется избегать некоторых кавычек для встроенной привязки. Обновлено: это еще одна причина для не использовать встроенные привязки.

Taplar 30.05.2019 20:09

Истинный. Я пропустил это, потому что не делал этого годами. Дэвид, вместо этого используйте обработчики событий в своем сценарии.

isherwood 30.05.2019 20:14
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
1
4
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добро пожаловать в экранирование строк. Что происходит, так это то, что у вас есть разделители, из-за чего ваш HTML ведет себя не так, как вы ожидали.

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

Вот обходной путь, чтобы заменить все ' на \' внутри вашей переменной.

var stronClick_escaped = stronClick.replace(/'/g, "\\'")
var strAppend  = "<button id='btnUEN' class='k-primary' onclick='getCategoryByUEN(" + stronClick_escaped +  ")'>"+ name +" </button>"
$("#nav_clacom_1474").append(strAppend);

Причина, по которой я заменил его на "\\'", заключается в том, что \ — это escape-символ! Так что вам тоже нужно бежать от него.

Редактировать: кавычки, из-за которых ваши строки преждевременно заканчиваются, являются разделителями, а символы внутри экранированной строки являются escape-символами.

Судя по его коду, в его переменной stronClick уже есть символы кавычек. Иначе как бы он напечатал onclick='getCategoriaByUEN('1','TEST AND TEST')'?

Jack Cole 30.05.2019 20:29

Ах, я пропустил, что переменная на самом деле содержит подстроку входных аргументов. На самом деле в этом случае ему просто нужно поменять местами ' в значении на ", и это сработает.

Taplar 30.05.2019 20:33

В любом случае, оба должны были бы сбежать. Потому что strAppend заключен в двойные кавычки.

Jack Cole 30.05.2019 20:42

Другие вопросы по теме