【问题标题】:Select text (almost) next to an element选择元素旁边的文本(几乎)
【发布时间】:2013-04-10 13:09:16
【问题描述】:

我需要将单选按钮及其旁边的文本包装在一个标签中,以便更加用户友好。

几天前我遇到了类似的问题,我有一个复选框,并且在我有一个 span 元素之后。我可以包装这两个元素。

我有这个 HTML:

<span class="Attribute">
    <input type="radio" name="vMONHRDREM" value="S">
    <script type="text/javascript">gx.dom.setAttribute("vMONHRDREM","gxoch0","if(!(gx.evt.jsEvent(this))) return false;");</script>
    Ativado

    <input type="radio" name="vMONHRDREM" value="N">
    <script type="text/javascript">gx.dom.setAttribute("vMONHRDREM","gxoch0","if(!(gx.evt.jsEvent(this))) return false;");</script>
    Desativado
</span>

很遗憾,我无法更改 HTML 结构,因为我使用的是生成页面的工具。

我正在尝试做这样的事情:

$("input[type=radio]").each(function(){
    alert($(this).next().next().text());
});

但它不起作用。它不返回任何东西。如果我更改为$(this).next().text(),我会得到脚本文本。

【问题讨论】:

    标签: javascript jquery jquery-selectors label next


    【解决方案1】:
    $("input[type=radio]").each(function(){
        var text = $(this).next().get(0).nextSibling.nodeValue;
    });
    

    【讨论】:

    • 太棒了!这向我展示了价值观。但是如何包装这两个元素?如果我使用 ...nextSibling.wrap("")。它甚至只包装“文本节点”。
    【解决方案2】:

    输入元素没有文本内容,你有的是流氓文本节点,你需要将它们与输入一起定位,然后用标签标签包装它们:

    $('.Attribute input[type="radio"]').each(function() {
        $(this).addBack()
               .add($(this).next('script')[0].nextSibling)
               .wrapAll('<label></label>');
    });
    

    FIDDLE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      相关资源
      最近更新 更多