JQuery - получить ключ к функции
Я должен работать через некоторый код и нашел следующую функцию, которую я не понимаю. Что делает hintContainer, он захватывает возвращаемое значение each() и кажется, что этот объект должен быть помещен внутри callback-функции?
Заранее спасибо за любые догадки, к сожалению, я не могу связаться с разработчиком. Короче говоря, функция должна захватывать все div с классом userHinterPanel и показывать их.
function prepareHintMessages() {
// gets all userHintePanels
var hintContainer = jQuery('div.userHintPanel').each(function() {
hintContainer = jQuery(this);
// hint content div
var hintContent = hintContainer.next();
// hint content text
var closeText = hintContainer.find('div.closeTextContainer');
// inserts text into the content container
hintContent.insertBefore(closeText);
// show the complete hint panel
hintContainer.parent().show();
});
}
ОБНОВЛЕНИЕ Фрагмент HTML, это информационное окно:
<form id="form" name="form" method="post"
action="xxx.jsf"
enctype="application/x-www-form-urlencoded" class="newPatientForm">
<div id="form_showAllHintsContainer" class="showAllHintsContainer"
onclick="jQuery('#form_showAllUserHints').click();"
title="Alle verfügbaren Hinweise auf dieser Seite einblenden">
?<input class="hidden" id="form_showAllUserHints"
name="form_showAllUserHints"
onclick="A4J.AJAX.Submit('form',event,{'oncomplete':function(request,event,data){prepareHintMessages();},'similarityGroupingId':'form_showAllUserHints','parameters':{'userPrefActionParamShow':'NEW_PATIENT_HINT','form_showAllUserHints':'form_showAllUserHints'} } );return false;"
value="showUserHints" type="button" />
</div>
<div class="generalPadding">
<div id="form_hintRerenderContainer">
<div id="form_newPatientHintWithIsh"
class="userHintPanelContainer newPatient">
<div id="form_newPatientHintWithIshHintPanel"
class="alert-message block-message warning userHintPanel">
<a href="#" onclick="closeHintMessage(this);"
title="Hinweis ausblenden" class="close">×</a>
<div class="header">Hinweis</div>
<div class="text">
<div class="closeTextContainer"
style="position: relative; height: 20px;">
<a href="#" onclick="closeHintMessage(this);"
style="font-size: 14px;" class="close"> Hinweis ausblenden</a>
</div>
</div>
<input class="hidden hideHintButton"
id="form_newPatientHintWithIshHintPanelHideButton"
name="form_newPatientHintWithIshHintPanelHideButton"
onclick="A4J.AJAX.Submit('form',event,{'similarityGroupingId':'form_newPatientHintWithIshHintPanelHideButton','parameters':{'form_newPatientHintWithIshHintPanelHideButton':'form_newPatientHintWithIshHintPanelHideButton','userPrefActionParam':'NEW_PATIENT_HINT'} } );return false;"
value="hideUserHints" type="button" />
</div>
<div class="hintContent">
<ul>...</ul>
</div>
</div>
</div>
1 ответ
Он захватывает все элементы с классом "userHintPanel" и добавляет некоторый контент непосредственно перед закрытием текстового контейнера, а после этого показывает все подготовленные userHintPanels.
Одна вещь:
var closeText = hintContainer.find('div.closeTextContainer'); is a bit strange.
Он нацелен на что-то похожее на это:
<div class="closeTextContainer">Panel x Close</div>
Но в вашем коде это будет не текст, а сам элемент. Возможно, разработчик имел в виду это?
var closeText = hintContainer.find('div.closeTextContainer').text();
Если это действительно намерение получить элемент, лучше переименуйте переменную в closeTextElement для лучшего понимания кода.
Еще одна странная вещь:
var hintContent = hintContainer.next();
Это приведет к тому, что в последнем userHintPanel hintContent имеет значение "undefined". Это намерение?
Еще одна очень важная вещь:
Является ли родительский элемент userHintPanel iFrame? Если это так, то следующее утверждение наверняка потерпит неудачу в Safari:
hintContainer.parent()
Вы должны получить сообщение об ошибке: SCRIPT5022: исключение DOM: HIERARCHY_REQUEST_ERR (3)