2012-03-07 81 views
-1

我想将图像附加到特定单词,但无法找到正确的CSS选择器来执行此操作。将图像附加到任何单词

我有我的网站的一部分显示数据,因为它从数据库中拉出,所以添加类或id的某些单词不是我的选择。 我需要CSS才能在页面上找到该单词(或本例中名称)的任何位置显示背景图像。

例如,在下面的(这是从数据库中抽取):

<td class="data1"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Patrick</font></td> 

我想添加其中名称Patrick被发现的背景图像。

我试过的变化,

td[.table1 *='Parick'] { 
    background-image:url(../images/accept.png); 

,但没有得到我的任何地方。由于它不在<span><div>甚至链接中,我无法弄清楚。如果您有任何想法或jQuery解决方法,请告诉我。谢谢!

+0

CSS本身不能做到这一点。 – 2012-03-07 14:59:47

+0

我认为这可能是事实。谢谢。 – Toasterdroid 2012-03-07 15:18:55

回答

1

如果你能保证的名字只在元素出现作为唯一的文本节点,你可以使用一个简单的jQuery选择...

$(':contains("Patrick")').addClass('name'); 

jsFiddle

如果有可能是周围的空白和/或搜索应不区分大小写,尝试...

$('*').filter(function() { 
    return $.trim($(this).text()).toLowerCase() == 'patrick'; 
}).addClass('name'); 

jsFiddle

如果您需要在任何文本节点发现任何地方的名称,然后你需要一个元素来包装它,尝试...

$('*').contents().filter(function() { 
    return this.nodeType == 3; 
}).each(function() { 
    var node = this; 
    this.data.replace(/\bPatrick\b/i, function(all, offset) { 
     var chunk = node.splitText(offset); 
     chunk.data = chunk.data.substr(all.length); 
     var span = $('<span />', { 
      'class': 'name', 
      text: all 
     }); 
     $(node).after(span); 
    }); 
});​ 

jsFiddle

我会推荐使用第三个例子。

+0

嗯。 '$(':contains(“Patrick”)')。addClass('name');'工作,但它将图像添加到整个页面,因为找到了名称。我需要将其专用于单词本身,因此每次找到该单词时,CSS都会将该图像添加到该单词的左侧。我尝试过,'$('td:contains(“Patrick”)')。addClass('name');'并且只把它放在整个表格之外。我对应的CSS是:'.name { \t background-image:url(../ images/accept.png); \t background-repeat:no-repeat; \t背景位置:左;' – Toasterdroid 2012-03-07 15:17:54

+0

@Toasterdroid尝试最后一个例子,它在我的小提琴中完美:) – alex 2012-03-07 15:28:39

+0

哦很酷。那么,我必须把剧本放在错误的地方。我会对它进行修补,直到我按照你的jsFiddle的例子开始工作。非常感谢! – Toasterdroid 2012-03-07 15:37:46