Jquery属性选择器

时间:2009-09-03 15:18:32

标签: javascript jquery html dom

我有一个变量(div元素),其中包含一些表格html。

我可以使用此javascript为每个具有背景设置的单元格添加一个类。

  var tds = tempDiv.getElementsByTagName("TD");
  for (var j = 0; j < tds.length; j++) {
    var oTd = tds[j];

    if (oTd.style.background.length > 0) {
      oTd.className = 'faketh';
      oTd.setAttribute('style', 'Clear');
    } //if
  }//for

我想做的是在jquery中做同样的事情。下面是我提出的,第二行工作正常,但第一行没有......

  $(tempDiv).find("td[style*='background:']").addClass("faketh");
  $(tempDiv).find("td").removeAttr('style');

任何帮助都将不胜感激。

编辑: 只是添加;我正在使用下面的代码而没有问题。

  $(tempDiv).find("tr:odd").addClass('row0');
  $(tempDiv).find("tr:even").addClass("row1");

所以它不是添加类的问题...问题是我找不到任何匹配的元素。这是td元素之一;

<td valign="top" class="faketd" style="border: 1pt solid windowtext; padding: 0cm 5.4pt; background: silver none repeat scroll 0% 0%; width: 131.4pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">
        <p style="margin: 0cm 0cm 0pt; text-align: justify;"><strong>VPN Name/Description:</strong></p>
        </td>

5 个答案:

答案 0 :(得分:3)

我认为你不能在jQuery中使用选择器来做到这一点。 style属性不是由浏览器存储为字符串,而是一个对象。

它已经实施,但是:http://code.google.com/p/aost/wiki/CustomJQuerySelectorInTellurium#:styles

或者您可以在this之类的内容中使用$ .each:

$("img").each(function() {
    if($(this).css('background').length > 0) {
        $(this).addClass('faketh');
    }

});

或者您可以使用jQuery过滤器:

var x = $("#tempDiv td").filter(function(i){
    return $(this).css("background").length > 0;
});

答案 1 :(得分:2)

试试这个

$(tempDiv).find("td[style*=background]").addClass("faketh");

EDIT 为了防止选择具有某种“背景 - ”的元素,您也可以按照

进行操作
$(tempDiv).find("td[style*=background]:not(td[style*=background-])").addClass("faketh");

但如果元素同时具有“background:blabla”和“background-color:#FFF”,则不会选中它

答案 2 :(得分:1)

一些警告:

  • 应该引用样式选择器的内容(检查Jquery docs中的样本),就像问题中的样本一样,而不是像其他人推荐的那样不引用。
  • 小心检查jQuery属性选择器中的style属性。浏览器可以修改字符串的内容(重新排序,冒号周围的间距等)以获得内部表示,每个浏览器的执行方式略有不同。

最重要的一点:

  • 您使用的是 Firefox吗?我在Firefox中遇到过一次或两次属性选择器的问题,所以如果您只在Firefox中测试过,请查看Chrome / IE / Safari / Opera /等。它不会解决问题,但可能会给你一个不同的范围。

答案 3 :(得分:0)

根据tempDiv的不同,您还可以通过执行以下操作来缩短它:

$(tempDiv + " td[style*=background:]").addClass("faketh");

答案 4 :(得分:0)

您正在搜索字符串'background:',但在您给出的示例中,它使用'background-color:'

因此将其更改为:

$(tempDiv).find("td[style*=background-color:]").addClass("faketh");

或:

$(tempDiv).find("td[style*=background]").addClass("faketh");