查找包含字符串的元素并替换同级元素

时间:2014-03-07 07:06:41

标签: javascript jquery html

所以,我有一个网站,我只有一些类可以用来隔离我想编辑的元素。我需要在html中找到一个包含某个字符串的元素,并替换其中一个兄弟的html。无论如何,这是我得到的代码:

if((".user.info").html().indexOf(vaUID[index]) >= 0) {
    $("a.user.info").each(function (index2, obj) {
        if($(this).html().indexOf(vaUID[index]) >= 0) {
            $(this).siblings('.registered').html('<div class="registered"><a href=http://www.twitch.tv/'+users[index]+ '>currently streaming' + data.stream.game + '</a></div>');
        }
    });
}

这是起始的html:

<div class="user first">
    <div class="element_avatar simple small  "><a href="http://www.cnr-clan.com/profile/xxxxxx" data-minitooltip="username"><img src="http://assets-cloud.enjin.com/users/xxxxxx/avatar/small.xxxxxx.png"></a></div>
    <div class="info">
        <a href="http://www.cnr-clan.com/profile/xxxxxx" class="element_username tag-xxxxxx">username</a>
        <span class="nameicons">
            <!--Irrelevant Excess Code-->
        </span>
        <div class="registered">currently browsing</div>
    </div>
    <div class="clearing"><!--  --></div>
</div>

我最终希望得到什么:

<div class="user first">
    <div class="element_avatar simple small  "><a href="http://www.cnr-clan.com/profile/xxxxxx" data-minitooltip="username"><img src="http://assets-cloud.enjin.com/users/2219573/avatar/small.xxxxxx.png"></a></div>
    <div class="info">
        <a href="http://www.cnr-clan.com/profile/xxxxxx" class="element_username tag-xxxxxx">username</a>
        <span class="nameicons">
            <!--Irrelevant Excess Code-->
        </span>
        <div class="registered"><a href='http://www.twitch.tv/username'>currently streaming gamename</a></div>
    </div>
    <div class="clearing"><!--  --></div>
</div>

请记住,我有几个像这样的代码块,具有相同的类。 vaUID [index]的示例值为xxxxxx。

2 个答案:

答案 0 :(得分:2)

我建议,基于HTML:

// selects the appropriate elements:
$('.user .info a.element_username')
    // filters that collection:
    .filter(function(){
        // retains only those in which this assessment results as true/truthy
        return $.trim($(this).text()) === 'username';
    })
    // searches amongst those retained-elements' sibling for those that match
    // the passed-selector:
    .siblings('div.registered')
    // wraps the contents of those elements with the supplied HTML:
    .wrapInner('<a href="http://www.twitch.tv/username"></a>');

JS Fiddle demo

上述filter()条件仅保留文字内容精确'username'字符串(demo to highlight that problem)匹配的元素;要保留那些只包含 字符串的字符串,您可以将filter()修改为:

return $(this).text().indexOf('username') > -1; // this is case-sensitive

JS Fiddle demo

或者:

return $(this).text().toLowerCase().indexOf('username') > -1; // this is case-insensitive

JS Fiddle demo

参考文献:

答案 1 :(得分:0)

我发现更简单的方法就是选择使用href属性的特定值。这是我生成的javascript:

$(".user .info a[href='http://www.cnr-clan.com/profile/" + vaUID[index] + "']").siblings('div.registered')
.html('<a href="http://www.twitch.tv/username/' + users[index] + '">streaming ' + data.stream.game + '</a>');