【问题标题】:Changing CSS properties using jQuery使用 jQuery 更改 CSS 属性
【发布时间】:2016-01-09 02:43:54
【问题描述】:

我正在尝试使用 jQuery 更改 CSS 文件夹中的 UL 图像。这适用于 Twitter 流,其中帐户发布的头像与推文一起更改。 使用 .css 非常简单,但我正在努力更改新图片的 URL。

这是我的客户端代码:

$(document).ready(function(){
    var socket = io();

    $('form').submit(function(){
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
        return false;
    });

    socket.on('info', function(data){
        console.log("this is teh question" + " " + data);
        $("#tweets").prepend("<li>" + data + "</li>");
    });

    socket.on('reply', function(data){
        console.log("this is my reply" + " " + data);
        $("#messages").prepend("<li>" + data + "</li>");
    });

    socket.on('userPic', function(data) {
        console.log("the userPic: " + data);
        $("ul#tweets").css("list-style-image: url", data);
    });
});

还有 CSS:

body {
    font: 13px Helvetica, Arial;
    max-width: 1250px;
    width: 100%;
    margin: auto;
}

form {
    background: #fff;
    padding: 10px;
    width: calc(100% - 20px);
    display: inline-block;
    border-bottom: 1px solid #ccc;
}

form input {
    border: 3px inset;
    padding: 7px 5px;
    width: calc(100% - 140px);
    margin-right: 10px;
    display: inline-block;
    font-size: 15px;
}

form button {
    width: 110px;
    background: #177cc1;
    color: #fff;
    border-radius: 6px;
    text-transform: uppercase;
    font-size: 22px;
    border: none;
    padding: 5px 10px;
    display: inline-block;
    cursor: pointer;
}

form button:hover {
    background: #177cee;
}

form button:active {
    background: #177caa;
}

form button:focus {
    outline: 0;
}

.container {
    display: inline-block;
    width: calc(100% - 60px);
    padding: 20px;
    margin: 5px 10px 20px;
    background: #222;
}

.content {
    display: inline-block;
    width: 100%;
    box-shadow: 1px 1px 1px 1px #555;
    border: 1px solid #555;
}

.tweets_container {
    display: inline-block;
    width: 100%;
    background: #fff;
}

.header {
    font-size: 32px;
    text-align: center;
    text-transform: uppercase;
    color: #fff;
    background: #333;
    padding: 15px;
}

#messages, #tweets {
    display: inline-block;
    margin: 5px;
    padding: 10px;
    width: calc(50% - 32px);
}

#tweets li, #messages li {
    padding: 10px;
    font-size: 18px;
}

#messages {
    background: #444;
    color: #fff;
}

ul#tweets {
    list-style-image: url("");
    height: 100px;
    width: 100px;
}

ul#messages {
    list-style-image: url("");
    height: 100px;
    width: 100px;
}

#tweets {
    background: #fff;
    color: #333;
}

.footer {
}

【问题讨论】:

    标签: javascript jquery html css twitter


    【解决方案1】:

    我相信这一点:

    $("ul#tweets").css("list-style-image: url", data);
    

    应该改为:

    $("ul#tweets").css("list-style-image", "url('"+data+"')");
    

    【讨论】:

    • 正确答案,虽然我没有看到有人建议将第一个示例更改为您在其下方放置的正确示例。
    • 它被编辑了,之前我看到 OP 时不存在
    • 谢谢,工作完美:)。为什么需要 +data+?
    • data 变量内有图片的url。现在为了连接它,我需要使用" 断开字符串,然后使用+ 连接它,然后使用另一个+ 继续字符串
    【解决方案2】:

    不查看您的 nodejs 和 socket.io,检查 socket.on('userPic', function(data) { 是否触发了 userPic 事件。如果是,请检查data的valid对于这个场景是否有效。

    list-style-image 的工作方式是它需要list-style-image:url('') 格式的工作 url,因此您的数据参数需要是由括号和引号包裹的有效图像路径。

    【讨论】:

      【解决方案3】:

      因为 css 只处理简单的属性值对,你的 JS 需要更新整个值才能工作。这里是an example,点击图片查看变化(为了简单起见,我使用了背景图片,除了属性名称和提供完全形成的属性值的原理之外没有区别)...

      $('.image').css(
          'background-image', 
          'url("http://lorempixel.com/400/200/sports/")'
      );
      

      你会使用这样的东西来获取一个变量:

      $('.image').css(
          'background-image', 
          'url("' + data + '")'
      );
      

      这与任何其他 css 属性更改相同。右侧的整个值需要更新才能正常工作。人们有时会遇到的类似问题是忘记在尺寸值中添加单位(例如宽度)并将数字直接放入:

      .css('width', number); // wrong
      .css('width', number + '%'); // right
      

      【讨论】:

      • 问题是关于动态更新列表样式图像,这是一种合法的方法,而不是更新背景图像。
      • @max7 我使用背景图像作为他看到的问题的一个简单示例,左边的属性是什么没有区别,而且,我不是在这里只是为了转储复制和粘贴的正确代码,我宁愿用一个例子来解释,以便 OP 可以自己更改自己的代码并实际学习一些东西
      • 左边的属性绝对会产生影响,我不确定哪个更令人震惊,我不得不说的事实,或者你做出如此明显有事实挑战的陈述的事实首先。不要转储代码,但要说出实际提出的问题,就这么简单。
      • @max7 - 有什么区别?据我所知,除了名称之外它是相同的:它们都使用需要拼接而不是直接放入的 URL 属性,如果你只有一个实际的 URL
      • 谢谢,你的例子帮助我理解了问题背后的概念
      猜你喜欢
      • 2012-07-13
      • 1970-01-01
      • 2012-09-02
      • 2014-02-14
      • 2013-05-08
      • 2015-02-03
      • 2013-06-23
      • 1970-01-01
      • 2020-06-15
      相关资源
      最近更新 更多