替换<label>的内容,但包含的表单控件</label>除外

时间:2013-12-04 14:00:27

标签: javascript html

我正在与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可用。关于如何在复选框后删除或替换只是部分的任何建议?

1 个答案:

答案 0 :(得分:6)

您可以这样做: 首先分离输入,然后清空标签并再次添加输入。

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