Изменить текстовую метку там, где внутри есть элемент ввода флажок

У меня есть эта часть HTML в моей форме:

<label class="ideal-radiocheck-label" onclick="">
    <input id="pagamento_8" class="_input " type="checkbox" onclick="half(this,value);" checked="" value="980" name="pagamento[]" style="position: absolute; left: -9999px;" autocomplete="off">
    <span class="ideal-check checked"></span>
    988 (980-980 €)
</label>

Это кнопка ввода флажка, которая вызывает функцию half(), чтобы вызвать что-то вроде вызова следующей функции:

function setClickedLabel(clicked,new_value){
    label_e=$(clicked).parent();
    label_t=$(label_e).text();
    labels_t=label_t.split('-');
    $(label_e).html(labels_t[0]+'-'+new_value+' €)');          <-- 1
    //$(label_e).text(labels_t[0]+'-'+new_value+' €)');        <-- 2
    //$(label_e).innerHTML = labels_t[0]+'-'+new_value+' €)';  <-- 3
}

Здесь я бы изменил часть метки "988 (980-980 €)" (последние 980), а переменная "clicked" - это входной объект, который вы можете видеть внутри элемента метки.

Используя один из трех описанных методов, я получил 2 эффекта. Whit 1,2 изменяет метку, но удаляет элемент ввода. Если 3, это ничего не значит.

Какую функцию я могу использовать? Как я должен исправить код, чтобы получить то, что мне нужно? HTML не может быть изменен.

Может быть, другая альтернатива без добавления.

TNX, J.

1 ответ

Адаптация сценария на jsfindle оставила комментарий от adeneo. Я написал это решение. Может быть, могут быть другие лучшие решения.

function setClickedLabel(clicked,new_value,old_value){
    label = $(clicked).parent().contents().filter(function() {
        return this.nodeType === 3 && this.nodeValue.trim().length;
    }).get(0);

    label.nodeValue = label.nodeValue.replace(new RegExp("-"+old_value), "-"+new_value);
}
Другие вопросы по тегам