У текста диалогового окна jQuery UI есть опция новой строки?

Я делаю сайт, используя данные из Pokemon и пытаюсь выполнить диалоговое окно. Я попытался использовать символ новой строки JS в тексте:

function alertBox(monster) {
    $("#dialog").dialog();
    $("#dialog").dialog("option", "title", monster);
    $("#dialog").text("Height: "  + pokemon.height[monster] + "\n" +
                      "Weight: " + pokemon.weight[monster]);
}

... И я также пробовал использовать тег разрыва строки html:

function alertBox(monster) {
    $("#dialog").dialog();
    $("#dialog").dialog("option", "title", monster);
    $("#dialog").text("Height: "  + pokemon.height[monster] + "<\br>" +
                      "Weight: " + pokemon.weight[monster]);
}

Но, похоже, я не возвращаю новый эффект, который я ищу! Оболочка JS просто действует как пробел, а тег разрыва строки html просто конкатенируется с строкой. Есть ли способ заставить новую строку в тексте диалога?

Ответ 1

Функция jQuery .text() автоматически ускользает от объектов HTML, поэтому тэг <br /> больше не интерпретируется как HTML, а вместо этого преобразуется в экранированный текст.

Чтобы предотвратить это экранирование HTML, вам нужно использовать .html() вместо .text(), чтобы установите содержимое:

function alertBox(monster) {
    $("#dialog").dialog();
    $("#dialog").dialog("option", "title", monster);
    $("#dialog").html("Height: "  + pokemon.height[monster] + "<br />" +
                      "Weight: " + pokemon.weight[monster]);
}

Ответ 2

Рассмотрим добавление:

$("#dialog").css("white-space","pre-wrap");

Это сделает \n значимым, и оно будет отображаться как таковое.

В качестве альтернативы рассмотрим использование некоторого фактического HTML. Например, ваш диалог может быть:

$("#dialog").html("<ul>" +
    "<li><b>Height:</b> "+pokemon.height[monster]+"</li>" +
    "<li><b>Weight:</b> "+pokemon.weight[monster]+"</li>" +
"</ul>");

Для более сложных макетов я бы предложил использовать шаблонную систему вместо HTML-кода жесткого кодирования в вашем JavaScript.

Ответ 3

Надеюсь, что это поможет увидеть, как работают функции text() val() и html()

$(document).ready(function () {

    $("#dialog").html("Height: " + 11 + "<br>" +
        "Weight: " + 22);

    $("#dialog2").val("Height: " + 11 + "\n" +
        "Weight: " + 22);

    $("#dialog3").text("Height: " + 11 + "\n" +
        "Weight: " + 22);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<div id="dialog"></div>
<textarea rows="5" cols="20" name="text" id="dialog2"></textarea>
<textarea rows="5" cols="20" name="text" id="dialog3"></textarea>