-1

我想在我的 DOM 树中找到具有类名的节点:ui-slider-handle ui-state-default ui-corner-all. 当我找到他们时,我想用我的 CSS 覆盖他们的 CSS。但我不能让我的代码工作:

var p = document.getElementsByClassName("ui-slider-handle ui-state-default ui-corner-all");
        for( var i=0; i<p.length; p++) {
                p[i].style.width = 5 + "px !important";
                p[i].style.height = 5 + "px !important";
            }




<div class="ui-slider ui-widget ui-widget-content ui-corner-all dhSliderDesktop ui-slider-vertical" style="visibility: visible;"><div class="ui-slider-range ui-widget-header ui-slider-range-min" style="height: 100%;"></div><a class="ui-slider-handle ui-state-default ui-corner-all" href="#" style="bottom: 100%;"></a></div>

在此处输入图像描述 在此处输入图像描述

我的元素创建:

var slider = document.createElement("div");
        $(slider).slider({
            orientation: "vertical",
            range: "min",
        });

        if(isMobile)
          $(slider).slider().addClass("dhSliderMobile");
      else
          $(slider).slider().addClass("dhSliderDesktop");
4

4 回答 4

2

如果你使用 jQuery

var slider = document.createElement("div");
$(slider).slider({
    orientation: "vertical",
    range: "min",
});

var items = $('.ui-slider-handle', slider);
console.log('Test: ', items.length, items)
console.log('HTML: ', slider.html())
$('.ui-slider-handle', slider).each(function(i, v){
    var style = $(this).attr('style');
    style += (style? ';' : '') + 'height: 5px !important; width: 5px !important;'
    $(this).attr('style', style)
})

另一个尝试的解决方案

var slider = document.createElement("div");
$(slider).slider({
    orientation: "vertical",
    range: "min",
});

$('.ui-slider-handle', slider).addClass('myoverride');

然后添加css规则

.myoverride {
    height: 5px !important;
    width: 5px !important;
}
于 2013-03-05T07:52:17.190 回答
1

请注意,该getElementsByClassName方法不兼容跨浏览器。

您可以使用 jquery$(".ui-slider-handle ui-state-default ui-corner-all")选择器或编写自己的跨浏览器代码来按类名捕获节点,如下所示:

http://javascript.ru/unsorted/top-10-functions#8-getelementsbyclass

于 2013-03-05T07:36:36.243 回答
0
  1. 您的类名选择器将不起作用,因为它没有完整的类名。这是正确ui-slider ui-widget ui-widget-content ui-corner-all dhSliderDesktop ui-slider-vertical的。但如果这是由您的脚本生成的,那么我认为您将不得不求助于 jQuery 以获得更好的选择器。另外 getElementsByClassName 不是跨浏览器。

    jQuery 版本的选择器:

    $(".ui-slider-handle ui-state-default ui-corner-all")
    

    或者您可以简单地为您的元素分配一个 ID 并使用getElementByID而不是类名来调用它。

  2. 你的循环有点偏离。它应该是 i++ 而不是 p++。

  3. javascript 中的样式属性无法接收“!important”。

通过修复您的脚本,这应该可以工作。

var p = document.getElementsByClassName("ui-slider ui-widget ui-widget-content ui-corner-all dhSliderDesktop ui-slider-vertical");

for( var i=0; i<p.length; i++) {
     p[i].style.width = "5px";
     p[i].style.height = "5px";
     console.log(p[i].style);
}
于 2013-03-05T07:54:30.557 回答
0

使用 Document.querySelector 浏览器兼容性:IE8+

alert(document.querySelectorAll(".ui-slider-handle.ui-state-default.ui-corner-all").length)
于 2013-03-05T08:16:03.043 回答