admin管理员组

文章数量:1392066

JS Fiddle Example

OK--I have a field that is a full name (last name, first name). The data that is returning isn't last and first name, it is full name. It is then printed last, first. I want to select just the last name (everything before ma), and set it to uppercase.

I may be mixing jQuery and javascript in my example, I'm not positive--still a newb. However, what I've done in the example is to:

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

Basically, I'm setting a variable of the field--I've tested that it accurately grabs the element I want it to grab. I'm turning the string into an array, split by the ma field. Then setting the two parts of the array as their own variables. Finally, attempting to wrap the lastName string in a span that adds the 'isUppercase' class. I know I'm doing something wrong, what is it?

JS Fiddle Example

OK--I have a field that is a full name (last name, first name). The data that is returning isn't last and first name, it is full name. It is then printed last, first. I want to select just the last name (everything before ma), and set it to uppercase.

I may be mixing jQuery and javascript in my example, I'm not positive--still a newb. However, what I've done in the example is to:

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

Basically, I'm setting a variable of the field--I've tested that it accurately grabs the element I want it to grab. I'm turning the string into an array, split by the ma field. Then setting the two parts of the array as their own variables. Finally, attempting to wrap the lastName string in a span that adds the 'isUppercase' class. I know I'm doing something wrong, what is it?

Share Improve this question asked Nov 30, 2012 at 17:19 Mike EarleyMike Earley 1,2934 gold badges22 silver badges52 bronze badges 1
  • I think it is because you are trying to split a JQuery object, what object are you selecting? (the bit that is split)... you need to get a string value form this object somehow – musefan Commented Nov 30, 2012 at 17:25
Add a ment  | 

3 Answers 3

Reset to default 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


The above is a quick solution setting a new innerHTML to the element. If you want to use proper DOM manipulation, it'd be like:

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

Note that I'm using .each() so the code above will work regardless of $('[data-dojo-attach-point|="physcianNameNode"]') matching multiple elements or just a single one.

The problem is you are trying to split a JQuery object.

I have updated your example: 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 ma
    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)
}

The problem occurs with this line:

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

The notation:

$('< some name >')

is a jQuery selector that selects an element. If you type this into your console (replacing < some name > with your selector) in your browser you'll see that it returns an object not a string. So your code is trying to split an object. I don't know where the string is located (div, span, input box etc.) but you need to pull the string to do the split. If your string is text in a div or span use:

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

as this will grab the string contained in that selector and then perform the split on it. Likewise, if it is in an input you will need to use the proper handler to get the value:

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

This will pull the value from an input and then perform the split. If your string is in html then you could alternatively grab it using the following notation:

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

This will pull the html and perform the respective split operation.

Hope this helps.

本文标签: javascriptSelect text string before commaset it to uppercaseStack Overflow