Чтобы сохранить разделение интересов, вот функция jQuery, которая либо найдет существующий элемент, либо создаст новый элемент.
Так что просто включите этот jQuery в любом месте:
$.fn.upsert = function(selector, htmlString) {
// upsert - find or create new element
// find based on css selector https://api.jquery.com/category/selectors/
// create based on jQuery() http://api.jquery.com/jquery/#jQuery2
var $el = $(this).find(".message");
if ($el.length == 0) {
// didn't exist, create and add to caller
$el = $("<span class='message'></span>");
$(this).append($el);
}
return $el;
};
Тогда вы можете использовать вот так:
$("input[name='choice']").click(function(){
var $el = $(this).closest("form").upsert(".message", "<span class='message'></span>");
// guaranteed to have element - update if we want
$el.html("You've chosen "+this.value)
})
В идеале было бы неплохо просто передать селектор и заставить jQuery создать элемент, который автоматически соответствует этому селектору, но, похоже, нетлегковесное транспортное средство для создания элемента на основе синтаксиса селектора CSS (на основе Вопрос 1 & Вопрос 2 ).
Некоторое дальнейшееУсовершенствования могут обеспечить более точно настроенный элемент управления для DOM-вставки вместо того, чтобы просто всегда использовать .append()
.
$.fn.upsert = function(selector, htmlString) {
// upsert - find or create new element
// find based on css selector https://api.jquery.com/category/selectors/
// create based on jQuery() http://api.jquery.com/jquery/#jQuery2
var $el = $(this).find(".message");
if ($el.length == 0) {
// didn't exist, create and add to caller
$el = $("<span class='message'></span>");
$(this).append($el);
}
return $el;
};
$("input[name='choice']").click(function(){
var $el = $(this).closest("form").upsert(".message", "<span class='message'></span>");
// guaranteed to have element - update if we want
$el.html("You've chosen "+this.value)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="">
<div>
<input type="radio" id="ca" name="choice" value="A" /><label for='ca'>A</label>
<input type="radio" id="cb" name="choice" value="B" /><label for='cb'>B</label>
<input type="radio" id="cc" name="choice" value="C" /><label for='cc'>C</label>
</div>
</form>