Невозможно отобразить отформатированный HTML в подсказке - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть существующий сайт Classi c ASP, который я конвертирую в C # / ASP. NET. На этом устаревшем сайте они используют следующий код для отображения HTML данных (в отличие от простого текста) в качестве всплывающей подсказки. Существующий код форматирует некоторые таблицы, используя HTML, а затем использует устаревший метод, чтобы сделать их всплывающей подсказкой. Пример:

function EnterContent(layerName, TTitle, TContent, RecordNum) {
        ContentInfo = '<table border="1" style="width: 200px; border-top-color: #808080; border-right-color: #808080; border-bottom-color: #808080; border-left-color: #808080; padding:0; border-spacing:0 ">' +
        '<tr><td style="width: 100%; border-top-color: #000000; border-right-color: #000000; border-bottom-color: #000000; border-left-color: #000000">' +
        '<table border="0"   style="width: 100%;padding: 0; border-spacing: 0; background-color: #C0C0C0">' +
        '<tr><td style="width: 100%; border-top-color: ' + topColor + '; border-right-color: ' + topColor + '; border-bottom-color: ' + topColor + '; border-left-color: ' + topColor + '">' +
        '<table style="width: 100%;padding :0;border-spacing: 0;text-align: center" >' +
        '<tr><td style="width: 100%; background-color: #0000FF">' +
        '<div class="tooltiptitle">' + TTitle + '</div>' +
        '</td></tr>' +
        '</table>' +
        '</td></tr>' +
        '<tr><td style="width: 100%; border-top-color: ' + subColor + '; border-right-color: ' + subColor + '; border-bottom-color: ' + subColor + '; border-left-color: ' + subColor + '">' +
            '<table {padding:5} style="width: 100%;border-spacing: 0;text-align: center">' +
            '<tr><td >' +
            '<font class="tooltipcontent">' + TContent + '</font>' +
            '</td></tr>' +
            '</table>' +
        '</td></tr>' +
        '</table>' +
        '</td></tr>' +
        '</table>';

        ReplaceContent(ContentInfo, RecordNum)
    }

И вот как они это сделали в устаревшем коде:

 function ReplaceContent(layerName){
   if(ie){document.all[layerName].innerHTML = ContentInfo}

   if(ns){
          with(document.layers[layerName].document) {
                 open();
                 write(ContentInfo);
                 close();
          }
   }

}

Обратите внимание, что для заполнения всплывающей подсказки используются слои документа. Это не рекомендуется и не будет работать с современными браузерами. Вот что я придумал:

       function ReplaceContent(ContentInfo, RecordNum) {
        var HTMLElement = document.getElementById(RecordNum)
    //    alert(ContentInfo)
        HTMLElement.title = ContentInfo

}

Такого рода работы. Он показывает всплывающую подсказку, но информация во всплывающей подсказке представляет собой обычный текст отформатированных таблиц HTML. Я не уверен, что вы даже можете успешно ввести HTML во всплывающую подсказку (я видел сообщения о том, что вы можете и не можете).

В моей версии RecordNum - это идентификатор элемента управления (в данном случае это TD в первой строке). Пример здесь:

       <b>1.</td><td width="100%" ID= \"" + aActions[i,0] + "\" runat=\"server\ "><span onMouseover="EnterContent('ToolTip','New Assignment','<b>Action Taken by:</b>
            <br>SOMEONES NAME<br>on Monday, October 28, 2019<br>at 9:11:50 AM EST<fieldset style=padding:2>
            <legend><b>Comment</b>
            </legend> SOMEONES NAME has been assigned as Person initiating the Help Call (Caller).</fieldset>'); Activate();"' 
            onmouseout="deActivate()">

Это вторая часть, которая открывает страницу ссылок (она работает правильно):

   <a href="javascript:ActionDetail(2257126);"><font class="ActionName"><b>New Assignment</a></span> </font><br></font>
            <span id="actionspan2" style="display=none;"><font class="ActionData"> SOMEONES NAME <br>on Monday, October 28, 2019<br>
            at 9:11:50 AM EST<br></span>
            </font></td></tr><tr><td width="19" valign="top"><center><font class="ActionData">

Вот как должна отображаться подсказка Legacy Tool Tip

Итак, моя проблема в том, что я могу получить правильный текст для всплывающей подсказки, но он не отображается в формате HTML. Я проверил код HTML, чтобы убедиться, что это не проблема. Я вставил его в страницу .aspx и убедился, что он отображается правильно. Я ни в коем случае не эксперт Javascript, поэтому заранее извиняюсь, если у меня возникнут дополнительные вопросы.

1 Ответ

1 голос
/ 11 февраля 2020

Этот код позволяет иметь html во всплывающей подсказке. Пожалуйста, измените стиль css при необходимости:

<!DOCTYPE html>
<html>
<style>
    .tooltip {
        position: relative;
        display: inline-block;
        border-bottom: 1px dotted black;
    }

        .tooltip .tooltiptext {
            visibility: hidden;
            width: 220px;
            background-color: #ffffff;
            text-align: center;
            border-radius: 6px;
            border: 1px;
            padding: 5px 0;
            position: absolute;
            z-index: 1;
            bottom: 125%;
            left: 50%;
            margin-left: -60px;
            opacity: 0;
            transition: opacity 0.3s;
        }

            .tooltip .tooltiptext::after {
                content: "";
                position: absolute;
                top: 100%;
                left: 50%;
                margin-left: -5px;
                border-width: 5px;
                border-style: solid;
                border-color: #555 transparent transparent transparent;
            }

        .tooltip:hover .tooltiptext {
            visibility: visible;
            opacity: 1;
        }

        .tooltip .tooltiptext TH {
            background-color: blue;
            color: #fff;
        }
</style>
<body style="text-align:center;">

    <h2>Tooltip</h2>
    <p>Move the mouse over the text below:</p>

    <div class="tooltip">
        Hover over me
        <span class="tooltiptext">
            <table>
                <tr>
                    <th>
                        SOMEONES NAME <br>on Monday, October 28, 2019
                        at 9:11:50 AM EST<br>
                    </th>
                </tr>
                <tr>
                    <td valign="top">
                        More data here
                    </td>
                </tr>
            </table>

        </span>
    </div>

</body>
</html>

Пара идей: Возможно, вы могли бы создать информацию всплывающей подсказки при создании ссылок (а не на лету). Вы также можете использовать вызов ajax для получения информации при наведении на нее курсора.

Приведенный здесь код является хорошим способом использовать всплывающие подсказки с CSS: https://www.w3schools.com/howto/howto_css_tooltip.asp

Похоже, вы меняете заголовок. Исходный код меняет внутренний HTML. Вы все еще можете назначить внутренний HTML элемента div, используя этот синтаксис:

document.getElementById (RecordNum) .inner HTML = "бы то ни было";

Я также большой поклонник jQuery, который имеет множество встроенных функций пользовательского интерфейса: https://jqueryui.com/tooltip/

...