영원한사랑

JavaScript용 픽셀단위 문자열 자르기

// by ziecle 07.02.06
function __getText(elem)
{
    if (elem.innerText) return elem.innerText;
    if (elem.textContent) return elem.textContent;
    return elem.innerHTML.replace(/<\/?[^>]+>/gi,"");
}

function __setText(elem, text)
{
    if (elem.innerText) { elem.innerText = text; return; }
    if (elem.textContent) { elem.textContent = text; return; }
    while (elem.firstChild) elem.removeChild(elem.firstChild);
    elem.appendChild(document.createTextNode(text), elem.childNodes[0]);
}

function stringCut(elem, cutWidth, suffix)
{
    var str = __getText(elem);

    var len;
    if (!str || !(len = str.length))
        return;

    elem.style.whiteSpace = "nowrap";
    elem.style.textOverflow = "ellipsis";
    elem.style.overflow = "hidden";

    var width = elem.offsetWidth;

    if (!width || width < cutWidth - 8)
        return;

    var temp = cutWidth;

    if (suffix)
    {
        elem.innerHTML += suffix;

        cutWidth -= (elem.offsetWidth - width + 4);

        if (cutWidth < 0)
            return;
    }
    else
    {
        suffix = "";
    }

    elem.title = str;

    var cut = parseInt(cutWidth / (width / len)) + 1;

    __setText(elem, str.substr(0, cut));

    if (elem.offsetWidth > cutWidth)
    {
        while (--cut)
        {
            __setText(elem, str.substr(0, cut).replace(/(\s*$)/g, ""));

            if (elem.offsetWidth < cutWidth)
            {
                break;
            }
        }
    }
    else
    {
        while (cut++ < len)
        {
            __setText(elem, str.substr(0, cut));

            if (elem.offsetWidth > cutWidth)
            {
                __setText(elem, str.substr(0, cut - 1).replace(/(\s*$)/g, ""));
                break;
            }
        }
    }

    elem.innerHTML += suffix;
}
 

방법은 무식합니다.
IE 6, 파폭 2.0.0.1에서 테스트했습니다.
사용법:
stringCut(문자열이 들어가는 엘리먼트, 너비, 붙을단어);
예제:
랄랄랄라~라랄라~랄랄랄라~라랄라~랄랄랄라~라랄라~랄랄랄라~라랄라~