我很难理解为什么变量在以下代码中无法正常工作。
var welcomeMsg = $('#accountbar span.welcome_text').text(); // This returns "Welcome, Nick(account) "
var cutdown = welcomeMsg.slice(0, -6); // This removes excessive spaces after (account)
cutdown = cutdown.slice(cutdown.indexOf(",")+2,cutdown.indexOf("(")); // returns "Nick"
var username = cutdown; // "Nick" //This doesn't work with last line of the script
//alert(username);
//var username = "Nick" // but this works if it's used instead of var username = cutdown;
//alert(username);
$("td:contains('"+username+"')").parent().css({
"background" : "url('http://imagehost.com/forum/row1.png')"
});
这是Greasemonkey脚本,如果重要的话。
解决:
似乎.trim
是删除所需字符串周围过多空格的更好方法。
如果这个
var cutdown = welcomeMsg.slice(0, -6); // This removes excessive spaces after (account)
cutdown = cutdown.slice(cutdown.indexOf(",")+2,cutdown.indexOf("("));
替换为此
var cutdown = welcomeMsg.slice(welcomeMsg.indexOf(",")+2,welcomeMsg.indexOf("("));
cutdown = cutdown.trim();
答案 0 :(得分:1)
slice()
和indexOf()
方法无法可靠地消除用户名周围的错误。使用正则表达式来实现更强大/更灵活的方法。
此外,即使选择了正确的行,只是设置这样的背景可能会因服务器问题,热链接阻塞等原因而失败。如果图像加载不采用,请将颜色设置为备份。考虑@require
图像以减少服务器依赖性(其他问题涵盖/涵盖的主题)。
这里的代码应该可以更好一些。 (See it in action at jsFiddle):
var welcomeMsg = $('#accountbar span.welcome_text').text ();
var userName = welcomeMsg.replace (
/^\s*Welcome,\s*([^\(]+)\((?:\n|\r|.)+$/i,
"$1"
);
userName = $.trim (userName);
$("tr:contains('" + userName + "')").css ( {
"background-color": "lime",
"background-image": "url('http://imagehost.com/forum/row1.png')"
} );
答案 1 :(得分:0)
似乎对我来说很好..我使用颜色而不是图像
var welcomeMsg="Welcome, Nick(account) " // This returns "Welcome, Nick(account) "
console.log("'" + welcomeMsg + "'");
var cutdown = welcomeMsg.slice(0, -6); // This removes excessive spaces after (account)
console.log("'" + cutdown + "'");
cutdown = cutdown.slice(cutdown.indexOf(",")+2,cutdown.indexOf("(")); // returns "Nick"
console.log("'" +cutdown+ "'");
var username = cutdown;
$("td:contains('"+username+"')").parent().css({ "color" : "red"});
答案 2 :(得分:-1)
.trim
修复了问题,而不是使用.slice