আমি jQuery ব্যবহার করে পাঠ্য প্রস্থ গণনা করার চেষ্টা করছি। আমি নিশ্চিত না তবে আমি অবশ্যই কিছু ভুল করছি।
সুতরাং, এখানে কোড:
var c = $('.calltoaction');
var cTxt = c.text();
var cWidth = cTxt.outerWidth();
c.css('width' , cWidth);
আমি jQuery ব্যবহার করে পাঠ্য প্রস্থ গণনা করার চেষ্টা করছি। আমি নিশ্চিত না তবে আমি অবশ্যই কিছু ভুল করছি।
সুতরাং, এখানে কোড:
var c = $('.calltoaction');
var cTxt = c.text();
var cWidth = cTxt.outerWidth();
c.css('width' , cWidth);
উত্তর:
এটি আমার পক্ষে আরও ভাল কাজ করেছে:
$.fn.textWidth = function(){
var html_org = $(this).html();
var html_calc = '<span>' + html_org + '</span>';
$(this).html(html_calc);
var width = $(this).find('span:first').width();
$(this).html(html_org);
return width;
};
'</span>', যদিও এটি কোনও পার্থক্য বলে মনে হচ্ছে না (এটি এফএফ 9 এর সাথে বা এটি ছাড়া কাজ করেছে)।
এখানে একটি ফাংশন যা অন্যদের চেয়ে ভাল পোস্ট করা কারণ
<input>, <span>বা "string"।ডেমো: http://jsfiddle.net/philfreo/MqM76/
// Calculate width of text from DOM element or string. By Phil Freo <http://philfreo.com>
$.fn.textWidth = function(text, font) {
if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').hide().appendTo(document.body);
$.fn.textWidth.fakeEl.text(text || this.val() || this.text()).css('font', font || this.css('font'));
return $.fn.textWidth.fakeEl.width();
};
$.fn.textWidth = function(){
var self = $(this),
children = self.children(),
calculator = $('<span style="display: inline-block;" />'),
width;
children.wrap(calculator);
width = children.parent().width(); // parent = the calculator wrapper
children.unwrap();
return width;
};
মূলত রুনের তুলনায় একটি উন্নতি, এটি .htmlএত হালকাভাবে ব্যবহার করে না
/বন্ধের বন্ধনী আগে <span>: TAGcalculator = $('<span style="display: inline-block;" />'),
textWidthউত্তর দেওয়া এবং যে ফাংশন একটি গ্রহণ stringএকটি আর্গুমেন্ট নেতৃস্থানীয় এবং সাদা স্পেস trailing হিসাব করবে না (ঐ ডামি কন্টেইনারে অনুষ্ঠিত হয় না) হিসাবে। এছাড়াও, পাঠ্যে যদি কোনও এইচটিএমএল মার্কআপ থাকে তবে তারা কাজ করবে না (একটি সাব-স্ট্রিং <br>কোনও আউটপুট উত্পাদন করবে না এবং এক জায়গার দৈর্ঘ্য ফিরিয়ে দেবে)।
এটি কেবল একটি textWidthকার্যকারিতা গ্রহণের ক্ষেত্রেই সমস্যা string, কারণ যদি কোনও ডিওএম উপাদান দেওয়া হয়, এবং .html()উপাদানটির প্রতি আহ্বান জানানো হয় তবে সম্ভবত ব্যবহারের ক্ষেত্রে এটি ঠিক করার দরকার নেই।
তবে, উদাহরণস্বরূপ, আপনি যদি কোনও পাঠকের inputউপাদানটির প্রস্থটিকে ব্যবহারকারী প্রকারের (আমার বর্তমান ব্যবহারের ক্ষেত্রে) হিসাবে গতিশীলভাবে পরিবর্তন করতে পাঠ্যের প্রস্থ গণনা করে থাকেন তবে আপনি সম্ভবত স্ট্রিংটির সাথে শীর্ষস্থানীয় এবং পিছনের স্থানগুলি প্রতিস্থাপন করতে এবং এনকোড করতে চাইবেন থেকে এইচটিএমএল
আমি ফিলফ্রেও এর সমাধানটি ব্যবহার করেছি তাই এর একটি সংস্করণ এখানে এটি সমাধান করে (সংযোজন সম্পর্কিত মন্তব্য সহ):
$.fn.textWidth = function(text, font) {
if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').appendTo(document.body);
var htmlText = text || this.val() || this.text();
htmlText = $.fn.textWidth.fakeEl.text(htmlText).html(); //encode to Html
htmlText = htmlText.replace(/\s/g, " "); //replace trailing and leading spaces
$.fn.textWidth.fakeEl.html(htmlText).css('font', font || this.css('font'));
return $.fn.textWidth.fakeEl.width();
};
font-size। css('font-size'), this.css('font-size'))এটির কাজ করার জন্য আমাকে যুক্ত করতে হয়েছিল। কোনও ধারণা কেন fontএকা এই মানটি অনুলিপি করে না?
.cssপদ্ধতি হিসাবে একই জায়গা , তবে আমি দেখতে পাচ্ছি আমার বন্ধনীগুলি ভুল। হওয়া উচিত css('font-size', this.css('font-size'))।
অসঙ্গত বক্স মডেলগুলির কারণে পাঠ্যের প্রস্থ নির্ধারণ করার চেষ্টা করার সময় jQuery এর প্রস্থের ফাংশনগুলি কিছুটা ছায়াময় হতে পারে। আসল পাঠের প্রস্থ নির্ধারণ করার জন্য নিশ্চিত উপায়টি হ'ল আপনার উপাদানটির ভিতরে ডিভ ইনজেকশন করা:
$.fn.textWidth = function(){
var sensor = $('<div />').css({margin: 0, padding: 0});
$(this).append(sensor);
var width = sensor.width();
sensor.remove();
return width;
};
এই মিনি প্লাগইনটি ব্যবহার করতে, সহজভাবে:
$('.calltoaction').textWidth();
spanশূন্য পাবেন। এই সমাধানটি এমন ক্ষেত্রে চেষ্টা করে H2, যেখানে প্যারেন্ট উপাদানগুলিতে ওভারফ্লো লুকানো থাকে এবং আমি কেবল পাঠ্যের কাটা দৈর্ঘ্য পাই। এটি কীভাবে কাজ করবে বলে মনে করা হচ্ছে তার ব্যাখ্যা এটি আরও ভাল কাজ করতে সহায়তা করবে?
আমি দেখতে পেয়েছি যে এই সমাধানটি ভালভাবে কাজ করে এবং আকার দেওয়ার আগে এটি মূল ফন্টটি উত্তরাধিকার সূত্রে পায়:
$.fn.textWidth = function(text){
var org = $(this)
var html = $('<span style="postion:absolute;width:auto;left:-9999px">' + (text || org.html()) + '</span>');
if (!text) {
html.css("font-family", org.css("font-family"));
html.css("font-size", org.css("font-size"));
}
$('body').append(html);
var width = html.width();
html.remove();
return width;
}
org.css("font-weight")। এছাড়াও, আমি বলব যে if(!text)অংশটি অপরিহার্য। যদি আমি উদাহরণ ব্যবহার jQuery("#someContainer").textWidth("Lorem ipsum")করি তবে আমি সেই নির্দিষ্ট পাত্রে প্রয়োগ করার সময় "Lorem ipsum" এর পাঠ্য প্রস্থটি জানতে চাই।
যখন পাঠ্যটি ধারণ করে রাখা উপাদানটির প্রস্থ নির্দিষ্ট ছিল তখন রুন এবং ব্রেন উভয়ই আমার পক্ষে কাজ করছেন না। ওকামেরার মতোই কিছু করেছি। এটি কম নির্বাচক ব্যবহার করে।
সম্পাদনা: এটি সম্ভবত যে উপাদানগুলি আপেক্ষিক ব্যবহার করে তাদের পক্ষে কাজ করবে না font-size, কারণ নীচের কোডগুলি htmlCalcউপাদান সন্নিবেশ করায় bodyপিতামাতার সম্পর্কের তথ্য হারাবে।
$.fn.textWidth = function() {
var htmlCalc = $('<span>' + this.html() + '</span>');
htmlCalc.css('font-size', this.css('font-size'))
.hide()
.prependTo('body');
var width = htmlCalc.width();
htmlCalc.remove();
return width;
};
thisইতিমধ্যে একটি jQuery অবজেক্ট তাই $(this)অপ্রয়োজনীয়।
যদি আপনি একটি নির্বাচিত বাক্সে পাঠ্য দিয়ে এটি করার চেষ্টা করছেন বা যদি এই দু'জন কাজ না করে থাকেন তবে পরিবর্তে এটি ব্যবহার করে দেখুন:
$.fn.textWidth = function(){
var calc = '<span style="display:none">' + $(this).text() + '</span>';
$('body').append(calc);
var width = $('body').find('span:last').width();
$('body').find('span:last').remove();
return width;
};
অথবা
function textWidth(text){
var calc = '<span style="display:none">' + text + '</span>';
$('body').append(calc);
var width = $('body').find('span:last').width();
$('body').find('span:last').remove();
return width;
};
আপনি যদি প্রথমে টেক্সটটি ধরতে চান
জিনিসটি, আপনি ভুল করছেন, আপনি cTxt এ একটি পদ্ধতি কল করছেন যা একটি সরল স্ট্রিং এবং jQuery অবজেক্ট নয়। cTxt আসলে অন্তর্ভুক্ত লেখা।
নিকোতে সামান্য পরিবর্তন, যেহেতু .children () খালি সেটটি ফেরত দেবে যদি আমরা এইচ 1 বা পি এর মতো কোনও পাঠ্য উপাদান উল্লেখ করি । সুতরাং আমরা .contents () পরিবর্তে ব্যবহার করব, এবং ব্যবহার এই $ পরিবর্তে (এই) আমরা একটি jQuery বস্তুর উপর একটি পদ্ধতি তৈরি করছেন গেছে।
$.fn.textWidth = function(){
var contents = this.contents(),
wrapper = '<span style="display: inline-block;" />',
width = '';
contents.wrapAll(wrapper);
width = contents.parent().width(); // parent is now the wrapper
contents.unwrap();
return width;
};
দু'দিন ধরে ভুতের তাড়া করার পরে, কোনও পাঠ্যের প্রস্থটি কেন ভুল ছিল তা বোঝার চেষ্টা করে, আমি বুঝতে পেরেছিলাম এটি পাঠ্যের স্ট্রিংয়ের সাদা স্পেসগুলির কারণেই প্রস্থের গণনা বন্ধ হবে।
সুতরাং, অন্য টিপটি হ'ল হোয়াইটস্পেসগুলি সমস্যা সৃষ্টি করছে কিনা তা পরীক্ষা করে দেখানো। ব্যবহার
অ-ব্রেকিং স্পেস এবং দেখুন এটি ঠিক করে দিয়েছে কিনা।
অন্যান্য ফাংশনগুলি লোকেরা খুব ভাল কাজের পরামর্শ দিয়েছিল, তবে এটি ছিল সাদা জায়গাগুলি সমস্যার কারণ।
white-space: nowrapএড়াতে কেবল সাময়িকভাবে ইনলাইন সিএসএসে যুক্ত করুন ।
আপনি যদি কোনও প্রদত্ত উপাদানের অভ্যন্তরে পাঠ্য নোড এবং উপাদানগুলির মিশ্রণের প্রস্থ নির্ধারণ করার চেষ্টা করছেন, আপনার সমস্ত বিষয়বস্তু wrapInner () দিয়ে মোড়াতে হবে , প্রস্থটি গণনা করুন, এবং তারপরে সামগ্রীগুলি আবদ্ধ করুন ।
* দ্রষ্টব্য: ডিফল্টরূপে সরবরাহ করা না হওয়ায় আপনাকে একটি আন-র্যাপইনার () ফাংশন যুক্ত করতে jQuery প্রসারিত করতে হবে।
$.fn.extend({
unwrapInner: function(selector) {
return this.each(function() {
var t = this,
c = $(t).children(selector);
if (c.length === 1) {
c.contents().appendTo(t);
c.remove();
}
});
},
textWidth: function() {
var self = $(this);
$(this).wrapInner('<span id="text-width-calc"></span>');
var width = $(this).find('#text-width-calc').width();
$(this).unwrapInner();
return width;
}
});
@ ফিলফ্রেওর উত্তরটি প্রসারিত:
আমি যাচাই করার ক্ষমতা যুক্ত করেছি text-transform, কারণ text-transform: uppercaseসাধারণত জিনিসগুলি পাঠ্যকে আরও প্রশস্ত করে তোলে।
$.fn.textWidth = function (text, font, transform) {
if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').hide().appendTo(document.body);
$.fn.textWidth.fakeEl.text(text || this.val() || this.text())
.css('font', font || this.css('font'))
.css('text-transform', transform || this.css('text-transform'));
return $.fn.textWidth.fakeEl.width();
};
পাঠ্যটি সহ পেতে কল করুন কলকামউইথ ()। এটি পুরোপুরি সূক্ষ্ম কাজ করে।
someFile.css
.columnClass {
font-family: Verdana;
font-size: 11px;
font-weight: normal;
}
function getColumnWidth(columnClass,text) {
tempSpan = $('<span id="tempColumnWidth" class="'+columnClass+'" style="display:none">' + text + '</span>')
.appendTo($('body'));
columnWidth = tempSpan.width();
tempSpan.remove();
return columnWidth;
}
দ্রষ্টব্য: - আপনি যদি ইনলাইন .css চান তবে কেবল শৈলীতে ফন্ট-বিবরণ দিন।
আমি আমার প্রয়োজন অনুসারে কাজ করতে নিকোর কোডটি সংশোধন করেছি।
$.fn.textWidth = function(){
var self = $(this),
children = self.contents(),
calculator = $('<span style="white-space:nowrap;" />'),
width;
children.wrap(calculator);
width = children.parent().width(); // parent = the calculator wrapper
children.unwrap();
return width;
};
আমি। বিষয়বস্তুগুলি ()। শিশুদের হিসাবে ব্যবহার করছি () আমার প্রয়োজনীয় পাঠ্য নোডগুলি ফেরায় না। আমি আরও দেখতে পেলাম যে রিটার্ন করা প্রস্থটি ভিউপোর্টের প্রস্থের দ্বারা প্রভাবিত হয়েছিল যার ফলে মোড়কের কারণ হ'ল আমি সাদা স্থান ব্যবহার করছি: এখন চাপ; ভিউপোর্ট প্রস্থ নির্বিশেষে সঠিক প্রস্থ পেতে।
আমি 100% কাজ করতে তালিকাভুক্ত সমাধান কোন পাওয়া গেল না, তাই এই নিয়ে এসেছেন সংকর @philfreo থেকে @chmurson থেকে ধারনা (যা @Okamera উপর ভিত্তি করে ঘুরে ছিল না) উপর ভিত্তি করে এবং:
(function ($)
{
var calc;
$.fn.textWidth = function ()
{
// Only create the dummy element once
calc = calc || $('<span>').css('font', this.css('font')).css({'font-size': this.css('font-size'), display: 'none', 'white-space': 'nowrap' }).appendTo('body');
var width = calc.html(this.html()).width();
// Empty out the content until next time - not needed, but cleaner
calc.empty();
return width;
};
})(jQuery);
thisএকটি jQuery এক্সটেনশন পদ্ধতির ভিতরে ইতিমধ্যে একটি jQuery অবজেক্ট, তাই $(this)অনেক উদাহরণের অতিরিক্ত অতিরিক্ত সমস্ত প্রয়োজন নেই ।white-space: nowrap, কেবলমাত্র এটি একক লাইন হিসাবে পরিমাপ করে তা নিশ্চিত করে (এবং অন্য পৃষ্ঠার স্টাইলিংয়ের উপর ভিত্তি করে রেখা মোড়ানো নয়)।fontএকা ব্যবহার করে এটি কাজ করতে পারি না এবং স্পষ্টরূপে কপিও করতে font-sizeহয়েছিল। এখনও নিশ্চিত নয় (এখনও তদন্ত চলছে)।@philfreo ।কখনও কখনও আপনাকে অতিরিক্ত উচ্চতা এবং কেবল পাঠ্যই নয় , এইচটিএমএল প্রস্থও পরিমাপ করতে হবে । আমি @ ফিলিফ্রেও উত্তর নিয়েছি এবং এটি আরও নমনীয় এবং দরকারী করে তুলেছি:
function htmlDimensions(html, font) {
if (!htmlDimensions.dummyEl) {
htmlDimensions.dummyEl = $('<div>').hide().appendTo(document.body);
}
htmlDimensions.dummyEl.html(html).css('font', font);
return {
height: htmlDimensions.dummyEl.height(),
width: htmlDimensions.dummyEl.width()
};
}
বিভিন্ন পিতামাতার জন্য পাঠ্যের প্রস্থ আলাদা হতে পারে, উদাহরণস্বরূপ, আপনি যদি এইচ 1 ট্যাগে কোনও পাঠ্য যুক্ত করেন তবে এটি ডিভ বা লেবেলের চেয়ে প্রশস্ত হবে, সুতরাং আমার সমাধানটি এর মতো:
<h1 id="header1">
</h1>
alert(calcTextWidth("bir iki", $("#header1")));
function calcTextWidth(text, parentElem){
var Elem = $("<label></label>").css("display", "none").text(text);
parentElem.append(Elem);
var width = Elem.width();
Elem.remove();
return width;
}
বিপুল পরিমাণে পাঠ্যের জন্য @ রুনে-কাগার্ডের মতো সমাধান নিয়ে আমার সমস্যা হয়েছিল। আমি এটি আবিষ্কার করেছি:
$.fn.textWidth = function() {
var width = 0;
var calc = '<span style="display: block; width: 100%; overflow-y: scroll; white-space: nowrap;" class="textwidth"><span>' + $(this).html() + '</span></span>';
$('body').append(calc);
var last = $('body').find('span.textwidth:last');
if (last) {
var lastcontent = last.find('span');
width = lastcontent.width();
last.remove();
}
return width;
};
আমার মনে হয় আপনার ব্যবহার করা উচিত $('.calltoaction').val;
এছাড়াও, আমি এর জন্য ক্লাসের পরিবর্তে আইডি (#) ব্যবহার করব .. আপনার যদি এমন ক্লাসগুলির একটির বেশি থাকে তবে এটি কীভাবে এটি পরিচালনা করবে?