在逗号前选择文本字符串,将其设置为大写

时间:2012-11-30 17:19:55

标签: javascript html arrays string

JS Fiddle Example

好的 - 我有一个全名字段(姓氏,名字)。返回的数据不是姓氏和名字,而是全名。然后将它打印到最后。我想只选择姓氏(逗号之前的所有内容),并将其设置为大写。

我可能在我的例子中混合了jQuery和javascript,我不是正面的 - 仍然是一个新手。但是,我在示例中所做的是:

function splitLastName(){
var splitNameArray = $('[data-dojo-attach-point|="physcianNameNode"]').split(",");
var lastName = splitNameArray[0];
var firstName = splitNameArray[1];
lastName.wrap('<span class="isUppercase" />');
}​

基本上,我正在设置该字段的变量 - 我已经测试过它准确地抓住了我希望它抓取的元素。我正在将字符串转换为数组,由逗号字段分割。然后将数组的两个部分设置为自己的变量。最后,尝试将lastName字符串包装在添加'isUppercase'类的span中。我知道我做错了什么,这是什么?

3 个答案:

答案 0 :(得分:5)

function splitLastName(){
    $('[data-dojo-attach-point|="physcianNameNode"]').html(function(i, v) {
        var names = v.split(',');
        return '<span class="isUppercase">'  +names[0] + '</span>,' + names[1];
    });
}

Fiddle

.html() docs


以上是为元素设置新innerHTML的快速解决方案。如果你想使用正确的DOM操作,它就像:

function splitLastName() {
    $('[data-dojo-attach-point|="physcianNameNode"]').each(function() {
        var names = $(this).text().split(',');
        $(this).empty().append($('<span>', {
            'class': 'isUppercase',
            text: names[0]
        }), ',' + names[1]);
    });
}

Fiddle

请注意,我正在使用.each(),因此无论$('[data-dojo-attach-point|="physcianNameNode"]')匹配多个元素还是仅匹配一个元素,上述代码都将有效。

答案 1 :(得分:3)

问题是您正在尝试拆分JQuery对象。

我已更新您的示例:See here

function splitLastName(){
    var element = $('[data-dojo-attach-point|="physcianNameNode"]');//find the element
    var html = element.html();//get the contents of the DIV element

    var splitNameArray = html.split(",");//Split the value with comma
    var lastName = splitNameArray[0];//store the last name
    var firstName = splitNameArray[1];//store the first name

    var newHtml = '<span class="isUppercase">' + lastName + '</span>, ' + firstName;//create the new html using the parsed values
    element.html(newHtml);//assign the new html to the original DIV element (overwriting the old)
}

答案 2 :(得分:1)

此行出现问题:

var splitNameArray = $('[data-dojo-attach-point|="physcianNameNode"]').split(",");

符号:

$('< some name >')

是一个选择元素的jQuery选择器。如果您在浏览器中键入此内容(在浏览器中替换&lt;某些名称&gt;和您的选择器),您将看到它返回的是一个对象而不是一个字符串。所以你的代码试图拆分一个对象。我不知道字符串的位置(div,span,输入框等),但你需要拉出字符串来进行拆分。如果您的字符串是div或span中的文本,请使用:

var splitNameArray = ($('[data-dojo-attach-point|="physcianNameNode"]').text()).split(",");

因为这将获取该选择器中包含的字符串,然后对其执行拆分。同样,如果它在输入中,您将需要使用适当的处理程序来获取值:

var splitNameArray = ($('[data-dojo-attach-point|="physcianNameNode"]').val()).split(",");

这将从输入中提取值,然后执行拆分。如果您的字符串是html,那么您也可以使用以下表示法获取它:

var splitNameArray = ($('[data-dojo-attach-point|="physcianNameNode"]').html()).split(",");

这将拉出html并执行相应的拆分操作。

希望这有帮助。