-1

需要一些专家的帮助!

我有一个包含多个 'div#gridContainer p' 元素的页面。基本上我只想找到 p 包含单词'Delivery'的那些,然后将变量'delivery'附加到所有匹配的元素。

到目前为止,这是我的代码,但它不仅仅针对包含“交付”的元素

if ($('div#gridContainer p:contains("Delivery")').length > 0) {
var delivery = 'image';
$('.deal_img').append(delivery);      
}

任何帮助表示赞赏

4

2 回答 2

1

很遗憾听到您无法访问生成代码来修复错误的 HTML 输出。多次使用 ID 只是自找麻烦。但我认为以下单行 jQuery 调用会产生您正在寻找的效果:$('div#gridContainer p:contains("Delivery") span.deal_img').append('image');

实时示例,在 Firefox 17、IE8 和 Chrome 30 中测试:

<div id="gridContainer"><p>This paragraph contains the word Delivery<span class="deal_img"></span>.</p></div>
<div id="gridContainer"><p>This paragraph does not contain the key word<span class="deal_img"></span>.</p></div>
<div id="gridContainer"><p>This paragraph also contains the word Delivery<span class="deal_img"></span>.</p></div>
<div id="gridContainer"><p>Neither does this paragraph does not contain the key word<span class="deal_img"></span>.</p></div>

<script type="text/javascript">
$('div#gridContainer p:contains("Delivery") span.deal_img').append('image');
</script>

更新:我稍微调整了我的答案。此外,由于您似乎希望将图像附加到<span>“deal_img”类中,因此我添加了一个具有更全面 JQuery 解决方案的 JSFiddle

于 2013-10-03T00:36:36.750 回答
0

一种方法(我强烈强烈建议您尽一切可能修改您的 HTML 以符合标准,只要让您的工作更容易,结果更可预测且跨浏览器兼容):

var text = 'image';
$('div[id="gridContainer"] p').each(function(i,e){
    var self = e;
    $(self).find('.deal-img').text(function(index,oldText){
        return self['textContent' || 'innerText'].indexOf('Delivery') > -1 ? text : oldText;
    });
});

JS 小提琴演示

以上内容基于以下 HTML,因为您拒绝发布您自己的任何内容以帮助我们帮助您:

<div id="gridContainer">
    <p>Delivery</p>
    <p>Something else entirely</p>
</div>
<div id="gridContainer">
    <p>Delivery <span class="deal-img">I have <em>no</em> idea about most of this question</span>
    </p>
    <p>Something else entirely</p>
</div>
<div id="gridContainer">
    <p>Something else entirely</p>
</div>
<div id="gridContainer">
    <p>Delivery <span class="deal-img">guessing where this element should go</span>
    </p>
    <p>Something else entirely</p>
</div>

参考:

于 2013-10-03T00:33:11.873 回答