Недавняя статья по этому вопросу Криса Рита в Кодирование без комментариев .
Примечание. Кодирование без комментариев больше недействительно. Тем не менее, связанная с этим статья была клонирована другим пользователем.
Обновленный ответ
Подсказка кода приводит к появлению индикаторов типа ответа рядом с каждым пунктом ответа, когда вы наводите курсор на любой из этих ответов. Это следует из следующих шагов:
document.querySelectorAll("[titles]")
. position: absolute
, но это абсолютное положение будет относиться к позиции соответствующего исходного абзаца ответа. 'mouseover'
событие, чтобы каждый индикатор был видимым, добавив к нему подходящий класс «показать мне». 'mouseout'
, чтобы каждый индикатор был скрыт, удалив тот же самый «показать мне» «класс из него. Я стараюсь не называть эти индикаторы всплывающими подсказками, как я заметил в комментариях. Обратите внимание, однако, что эти индикаторы появляются сразу же после начала наведения, но исходная подсказка по умолчанию только для этого конкретного ответа также появляется через минуту или два, дублируя некоторые данные вашего дисплея без необходимости. Вы можете отключить эту всплывающую подсказку по умолчанию, если хотите, но это потребует дополнительной работы.
Я включил z-index: -1;
в стиль индикаторов из-за проблемы, которая может возникнуть в ее отсутствие. Вы показываете индикаторы, вызывая ответ. Однако, если, когда этот индикатор появляется, он покрывает ответ, где находится ваш курсор, тогда мышь технически больше не отвечает за ответ, и вы немедленно запускаете событие 'mouseout'
. В качестве альтернативы, если вы случайно натолкнулись на позицию, находящуюся в пункте ответа, но немного вдали от того, где появляется индикатор, индикатор по-прежнему будет отображаться как ожидалось. Тем не менее, вам нужно только перемещать указатель мыши на несколько миллиметров мыши на индикатор, эффективно вынимая ответ, снова заставляя индикатор исчезать преждевременно. z-index: -1;
предотвращает это, так как это гарантирует, что пункт ответа также «сверху». Однако одна нижняя сторона этого заключается в том, что текст индикатора может быть частично скрыт текстом ответа в зависимости от того, как вы позиционируете индикатор относительно текста ответа.
// the positioning of each indicator relative its corresponding answer text
var indicOffsetTop = 10;
var indicOffsetLeft = 5;
// retrieve all the answer paragraphs from the DOM
var answers = document.querySelectorAll("[title]");
// build but don't yet show the answer-type indicators
// loop over each answer paragraph
[].forEach.call(answers, function(answer) {
// create a new div element that will contain the answer-type text
var indic = document.createElement("div");
// style this div so it stands out and also so that it starts out hidden
indic.classList.add("answerTypeIndicator");
// get the position of the original answer paragraph so that
// the new answer-type indicator can be positioned near it
var posn = answer.getBoundingClientRect();
// slightly offset the position of the answer-type indicator relative to
// its corresponding answer text so that both can be seen simultaneously
indic.style.top = posn.top + indicOffsetTop + "px";
indic.style.left = posn.left + indicOffsetLeft + "px";
// take the value (i.e. the text) from the title attribute of the answer paragraph
// and put it into the content of the answer-type indicator
indic.innerHTML = answer.getAttribute("title");
// place the new indicator into the DOM, but note that it is still hidden at this point
document.body.appendChild(indic);
});
// put all the newly created answer-type indicator divs into a variable for later access
var indics = document.querySelectorAll(".answerTypeIndicator");
// determine what code to call when starting and stopping hovering over an answer
// do this by adding hover listeners to each "answer" paragraph
[].forEach.call(answers, function(answer) {
answer.addEventListener("mouseover", showTitleInfo);
answer.addEventListener("mouseout", hideTitleInfo);
});
// do this when starting to hover over an answer
function showTitleInfo() {
// loop through each answer-style indicator div
[].forEach.call(indics, function(indic) {
// make each indicator visible
indic.classList.add("showing");
});
}
// do this when stopping hovering over an answer
function hideTitleInfo() {
// loop through each answer-style indicator div
[].forEach.call(indics, function(indic) {
// hide each indicator
indic.classList.remove("showing");
});
}
.answerTypeIndicator {
position: absolute;
font-size: 10pt;
background-color: rgba(255, 128, 0, 0.3);
color: rgb(200, 0, 0);
padding: 0.2em 0.5em 0.1em;
border: solid rgb(200, 0, 0) 1px;
fill-opacity: 0.2;
display: none;
z-index: -1;
}
.showing {
display: block;
}
<h3>Move the mouse over any answer to see all answer types.</h3>
<p>Which of these is a way to greet someone?</p>
<p title="Correct answer">Hello world</p>
<p title="Wrong answer">Goodbye world</p>
<p>What color is an apple?</p>
<p title="Correct answer">Red</p>
<p title="Wrong answer">Blue</p>
Простой способ проверить это.
HTML:
<p class="display_all_title"></p>
JS:
var all_title = "";
$("body").find('p[title]').each(function() {
all_title += $(this).attr('title') + " ";
});
$('p.display_all_title').html(all_title);
JsFiddle: https: // jsfiddle.net/fhepoeb5/
class="display_all_title"
добавляется только к одному абзацу, чтобы показать результаты, а не каждому из ваших так называемых «ответов». абзацы.
– Andrew Willems
24 February 2016 в 14:35
$('p.display...
line внутри i> использовать функцию .each(...
, так как это (без необходимости) обновляет p.display...
каждый раз через цикл. Лучше просто переместить эту последнюю строку после функции, чтобы она обновлялась только один раз в конце. Для этого не требуется ни одной дополнительной буквы кода.
– Andrew Willems
24 February 2016 в 14:40