3

JS 小提琴示例

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

在我的示例中,我可能正在混合使用 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' 类的跨度中。我知道我做错了什么,这是什么?

4

3 回答 3

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];
    });
}

小提琴

.html()文档


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]);
    });
}

小提琴

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

于 2012-11-30T17:29:24.693 回答
3

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

我已经更新了你的例子:见这里

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)
}
于 2012-11-30T17:31:56.423 回答
1

此行出现问题:

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

符号:

$('< some name >')

是一个选择元素的 jQuery 选择器。如果您在浏览器的控制台中输入此内容(将 < some name > 替换为您的选择器),您会看到它返回的是一个对象而不是字符串。因此,您的代码正在尝试拆分对象。我不知道字符串的位置(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 并执行相应的拆分操作。

希望这可以帮助。

于 2012-11-30T17:32:32.710 回答