子串不返回正确的文本?

时间:2012-10-16 22:32:37

标签: javascript jquery greasemonkey

我很难理解为什么变量在以下代码中无法正常工作。

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();

3 个答案:

答案 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)

似乎对我来说很好..我使用颜色而不是图像

CHECK FIDDLE

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