将具有混合内容的元素内的第一个文本节点包装在另一个div中

时间:2015-08-07 05:19:30

标签: javascript jquery html css jqgrid

有没有办法使用jQuery / javascript将此文本W'ñÝÃáèTÿpê !!!_W<div></div>包装在以下html结构中?

<div id="jqgh_PageGrid_ControlType" class="ui-jqgrid-sortable">
    W'ñÝÃáèTÿpê !!!_W<span class="s-ico" style="display:block">
        <span sort="asc" class="ui-grid-ico-sort ui-icon-asc ui-state-disabled ui-icon ui-icon-triangle-1-n ui-sort-ltr"></span>
        <span sort="desc" class="ui-grid-ico-sort ui-icon-desc ui-state-disabled ui-icon ui-icon-triangle-1-s ui-sort-ltr"></span>
    </span><button class="grid-header-filter-btn ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only" role="button" title="">
        <span class="ui-button-icon-primary ui-icon ui-icon-gear"></span>
        <span class="ui-button-text"></span>
    </button>
</div>

5 个答案:

答案 0 :(得分:1)

使用以下jQuery代码。

$('<div>').append($.trim($('.ui-jqgrid-sortable').text()))

答案 1 :(得分:0)

这应该按照您的要求进行。

您可以使用以下内容替换页面正文中第一个单词:

var replaced = $("body").html().replace('W'ñÝÃáèTÿpê !!!_W','<div>W'ñÝÃáèTÿpê !!!_W</div>');
$("body").html(replaced);

如果要替换所有出现的单词,则需要使用正则表达式并将其声明为global / g:

var replaced = $("body").html().replace(/W'ñÝÃáèTÿpê !!!_W/g,'<div>W'ñÝÃáèTÿpê !!!_W</div>');
$("body").html(replaced);

答案 2 :(得分:0)

&#13;
&#13;
$("#jqgh_PageGrid_ControlType").html(function(){
  return this.innerHTML.replace("W'ñÝÃáèTÿpê !!!_W",'<div style="color:red;">Whatever</div>');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<div id="jqgh_PageGrid_ControlType" class="ui-jqgrid-sortable">
        W'ñÝÃáèTÿpê !!!_W<span class="s-ico" style="display:block">
            <span sort="asc" class="ui-grid-ico-sort ui-icon-asc ui-state-disabled ui-icon ui-icon-triangle-1-n ui-sort-ltr"></span>
            <span sort="desc" class="ui-grid-ico-sort ui-icon-desc ui-state-disabled ui-icon ui-icon-triangle-1-s ui-sort-ltr"></span>
        </span><button class="grid-header-filter-btn ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only" role="button" title="">
            <span class="ui-button-icon-primary ui-icon ui-icon-gear"></span>
            <span class="ui-button-text"></span>
        </button>
    </div>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

您可以使用jQuery函数contents()获取包括文本节点在内的所有子节点。

然后,您可以使用jQuery函数filter()按类型过滤节点。

最后使用jQuery函数first()来抓取第一个文本节点(你发布的代码只有一个,但是如果你不能控制的话,谁知道可以添加什么)

...所以这将获取第一个文本节点,该节点是#jqgh_PageGrid_ControlType <div>的直接后代,并将其换成全新的(积极的红色)<div>

$('#jqgh_PageGrid_ControlType').contents().filter(function(){
    return this.nodeType === 3;
}).first().wrap('<div style="background:#f00">');

答案 4 :(得分:-1)

你也可以在这样的原生javascript中做到这一点。

     var jqgh_PageGrid_ControlType = document.getElementById('jqgh_PageGrid_ControlType');

         jqgh_PageGrid_ControlType.innerHTML = jqgh_PageGrid_ControlType.innerHTML.replace("W'ñÝÃáèTÿpê !!!_W", "<div>W'ñÝÃáèTÿpê !!!_W</div>");