替换<标签>,包含的表单控件除外

Replace content of a <label>, except the contained form control

本文关键字:表单 控件 lt 标签 gt 替换 包含      更新时间:2024-03-23

我正在与Janrain的Capture小部件系统集成,客户希望自定义Janrain代码提供的许多标准表单标签。Janrain有可能进行这些定制,但这需要经过他们的开发队列(这将花费太长时间)。

他们的建议是捕获一个javascript事件(onCaptureRenderComplete),并对代码进行必要的更改(这感觉很粗糙,但是官方建议的选项)。

我需要更改与复选框关联的标签的文本,其中复选框本身嵌套在标签中。对于其他标签,我们要么简单地重写了innerHTML,要么只使用字符串替换来更改几个单词。我正在处理的标签看起来像:

<label for="capture_traditionalRegistration_traditionalRegistration_privacyPolicy">
    <input type="checkbox" name="traditionalRegistration_privacyPolicy" class="capture_traditionalRegistration_privacyPolicy capture_input_checkbox" value="true" data-capturefield="traditionalRegistration_privacyPolicy" id="capture_traditionalRegistration_traditionalRegistration_privacyPolicy">
    I understand that by signing up or using the site, I agree to the
    <a target="_blank" href="/about-freesat/privacy-policy">Privacy Policy</a> and
    <a target="_blank" href="/about-freesat/terms">Terms of Service</a>
</label>

在这种情况下,将复选框后面的整个HTML块硬编码为字符串以便替换它是非常脆弱的。我想做的只是全面替换所有内容,但我不能替换复选框,因为它附带了事件处理程序。

我有jQuery可用。关于如何删除或替换复选框后的零件,有什么建议吗?

您可以执行以下操作:首先分离输入,然后清空标签并再次添加输入。

var inp = $('label').find('input').detach();
$('label').empty().append(inp);