শিশু ট্যাগগুলিতে নেস্টেড নয় কেবল পাঠ্য পুনরুদ্ধার করতে .text () ব্যবহার করা


386

যদি আমার এইচটিএমএল থাকে:

<li id="listItem">
    This is some text
    <span id="firstSpan">First span text</span>
    <span id="secondSpan">Second span text</span>
</li>

আমি .text()কেবল "এটি কিছু পাঠ্য" স্ট্রিংটি পুনরুদ্ধার করার জন্য ব্যবহার করার চেষ্টা করছি , তবে যদি আমি বলতে চাই $('#list-item').text(), আমি "এটি কিছু পাঠ্য ফার্স্ট স্প্যান টেক্সটসেকেন্ড স্প্যান পাঠ্য" পেয়েছি।

এমন কিছুর মাধ্যমে কিছু পাওয়ার (এবং সম্ভবত মুছে ফেলার) উপায় আছে কি? .text("")কোনও ট্যাগের মধ্যে কেবল নিখরচায় পাঠ্য ) , এবং তার সন্তানের ট্যাগগুলির মধ্যে থাকা পাঠ্য কি নেই?

এইচটিএমএলটি আমার দ্বারা রচিত হয়নি, তাই এটি নিয়েই আমাকে কাজ করতে হবে। আমি জানি যে এইচটিএমএল লেখার সময় কেবলমাত্র ট্যাগগুলিতে পাঠ্য মোড়ানো সহজ হবে, তবে আবার এইচটিএমএল প্রাক-লিখিত হয়।


কারণ আমি মন্তব্যের এখনও যথেষ্ট খ্যাতি ছিল না এবং চাই না আমি জ্ঞান হারিয়ে যেতে (আশা এটা অন্য কারো সাহায্য করে), সংমিশ্রণ macio.Jun 'উত্তর , কোন RegExp এবং iStranger' উত্তর থেকে এইচটিএমএল সঙ্গে একটি textNode প্রতিস্থাপন জাভাস্ক্রিপ্টে? আমাকে একটি স্ট্রিংয়ের জন্য কেবল টেক্সট নোড অনুসন্ধান করতে এবং লিঙ্কগুলির সাথে সমস্ত উপস্থিতি প্রতিস্থাপনের অনুমতি দিয়েছে।
জেডিকিউ

উত্তর:


509

আমি প্যারেন্ট উপাদানগুলির মধ্যে কেবল পাঠ্য পেতে এখানেclone() পাওয়া পদ্ধতির ভিত্তিতে এই পুনরায় ব্যবহারযোগ্য প্রয়োগটি পছন্দ করেছি ।

সহজ রেফারেন্সের জন্য কোড সরবরাহ করা হয়েছে:

$("#foo")
    .clone()    //clone the element
    .children() //select all the children
    .remove()   //remove all the children
    .end()  //again go back to selected element
    .text();

5
এই সমাধানের সাহায্যে আপনি কেবল শিশু ব্যতীত পাঠ্যটি পাবেন তবে আপনি কেবলমাত্র পাঠ্যটি প্রতিস্থাপন করতে পারবেন না।
বেনরো

1
আমি 1 জিনিস পাই না: যদি .end () নির্বাচিত উপাদানগুলিতে ফিরে যায় তবে পাঠ্যের () থেকে শিশুদের উপাদানগুলির সাথে মূল পাঠ্যটি অনুলিপি করা উচিত। তবে অনুশীলনে আমি দেখতে পাচ্ছি যে আমাদের কারসাজিযুক্ত ক্লোন থেকে পাঠ্যটি অনুলিপি করা হচ্ছে। সুতরাং শেষ () ক্লোন () ফিরে যায়?

68
এটি করার সত্যিই অদক্ষ উপায়
বিলিয়নকান

5
@ বিলেকোনান, আপনি কি আরও দক্ষ পদ্ধতির পরামর্শ দিতে পারেন? এটি আকর্ষণীয় কারণ এটি "পরিষ্কার" এবং "সংক্ষিপ্ত"। আপনি কি পরামর্শ দিচ্ছেন?
derekmx271


364

সহজ উত্তর:

$("#listItem").contents().filter(function(){ 
  return this.nodeType == 3; 
})[0].nodeValue = "The text you want to replace with" 

38
আমি বুঝতে পারছি না কেন দক্ষ উত্তর (যে বহিরাগত ডেটা স্ট্রাকচার তৈরি করে না) যতটা কম ভয়াবহ দেখাচ্ছে এমন উত্তরের মতো ভোট দেওয়া হয় না। আমি পারলে +5।
স্টিভেন লু

16
সহজ এবং দক্ষ উত্তর
পল ক্যারল

9
এটি কেবল আরও দক্ষ নয় সঠিকও! যখন শিশু উপাদানগুলির মধ্যে পাঠ্য ছড়িয়ে দেওয়া থাকে তখন এই সমাধান পরিস্থিতিগুলি পূরণ করে। +5
কিরিল টেনিন বাউম 4'14

15
আরও পরিষ্কার হওয়ার জন্য, আপনি যদি IE8 + ব্যবহার করেন তবে আপনি এর this.nodeType == Node.TEXT_NODEপরিবর্তে ব্যবহার করতে পারেন this.nodeType == 3। আইএমও পড়া এবং বোঝা সহজ।
NorTicUs

8
আপনি যদি কোনও পাঠ্য না দিয়ে এমন কিছু ব্যবহার করেন তবে এটি ভঙ্গ হবে। আপনি যদি এটি কোনও ফাংশন হিসাবে ব্যবহার করছেন এবং এমন কোনও দৃশ্য রয়েছে যেখানে আপনার পাঠ্য থাকতে পারে বা নাও থাকতে পারে, কেবল .contents().filter(...)একটি স্থানীয় ভেরিয়েবলে কলটি ক্যাপচার করুন এবং তার দৈর্ঘ্য পরীক্ষা করুন, উদাহরণস্বরূপ, var text = $(this).contents().filter(...); if (text.length) { return text[0].nodeValue; } return "";
কার্ল বুসেসিমা

157

এটি আমার কাছে জ্যাকুরির অতিরিক্ত ব্যবহার করার মতো ঘটনা বলে মনে হচ্ছে। নিম্নলিখিতটি অন্যান্য নোডগুলি উপেক্ষা করে পাঠ্যকে দখল করবে:

document.getElementById("listItem").childNodes[0];

আপনাকে এটি ছাঁটাই করতে হবে তবে এটি আপনি যা চান তা সহজ লাইনে পরিণত হয়।

সম্পাদনা

উপরের টেক্সট নোড পাবেন । আসল পাঠ্য পেতে, এটি ব্যবহার করুন:

document.getElementById("listItem").childNodes[0].nodeValue;

31
সেরা উত্তর, আপনার এইটির জন্য একটি প্লাগইন বা 10 জিকুয়েরি কলগুলির একটি চেইন লাগানোর কথা নয়। $('.foo')[0].childNodes[0].nodeValue.trim()
বৃষ্টি

5
যদি পাঠ্য সামগ্রীটি বিভিন্ন নোডে বিভক্ত হয়ে যায় (ক্রলফ, পাঠ্য, ক্রল্ফের অনুক্রমের মতো)? ইউএ দ্বারা নির্মিত ডোমটি সহজ কাঠামোটি ব্যবহার করবে এমন কোনও (রেল-লাইফ) গ্যারান্টি আছে?
কলস্পার

5
মোটামুটি সেরা উত্তর ... অন্যান্য লোকেরা মাঝে মাঝে jQuery ব্যবহার করেন কেন?
ncubica

11
এটি কেবল <ডিআইডি আইডি = "তালিকার আইটেম"> আপনি <span> অন্যান্য </span> </div> চান পাঠ্যের ক্ষেত্রে কাজ করে। এটি <div id = "listItem"> <span> অন্যান্য </span> পাঠ্যের জন্য কাজ করবে না আপনি </ div>
স্পেনসার

1
কখনও কখনও আপনি না document। ব্যবহার করে এখানে এসেছেন cheerio
ফ্ল্যাশ

67

আরও সহজ এবং দ্রুত:

$("#listItem").contents().get(0).nodeValue

এই ক্রস ব্রাউজারটি কি সামঞ্জস্যপূর্ণ?
রজত গুপ্ত 13

অবশ্যই এটি সূচক দ্বারা প্রদত্ত jQuery অবজেক্টের সাথে মেলে এমন একটি উপাদানের পুনরুদ্ধার করে: জ্যাকুয়ের ডক্স .get ()
ওয়েকআপমর্নিং

1
@ নাট ক্ষেত্রে আপনার প্রয়োজন এটি একটি <br/> ট্যাগে আপনি ম্যাকিও ব্যবহার করতে পারেন un জুন এর উত্তর।
ওয়েকআপমর্নিং

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ড্যানি

2
কেন কেবল ন্যায়বিচারের get(0)পরিবর্তে [0]?
ক্লোনকেক্স

28

গৃহীত উত্তরের মতো, তবে ক্লোনিং ছাড়াই:

$("#foo").contents().not($("#foo").children()).text();

এবং এই উদ্দেশ্যে এখানে একটি jQuery প্লাগইন রয়েছে:

$.fn.immediateText = function() {
    return this.contents().not(this.children()).text();
};

এই প্লাগইনটি কীভাবে ব্যবহার করবেন তা এখানে:

$("#foo").immediateText(); // get the text without children

T.children () এ টি কি?
ফ্রিএইচএমএএন

এটি জানুয়ারী 15 এ pbjk লিখেছেন তার একটি সদৃশ সমাধান ... তবুও - এটি দুর্দান্ত দেখাচ্ছে।
ওসকার হলমক্র্যাটজ

1
সত্যই নয়, @ অস্কার। .contents()অংশ এখানে সমালোচনামূলক হয়!
DUzun

আপনার নোডগুলি এইড ব্যবহার না করে তবে খারাপ সমাধান।
অ্যান্ড্রয়েড ডেভ

3
@ অ্যান্ড্রয়েডডেভ আপনার পক্ষে যা কাজ করে তা আপনি সর্বদা নির্বাচককে প্রতিস্থাপন করতে পারেন। এটি কেবল কৌশলটি বর্ণনা করার জন্য! এটি আইডি ছাড়াও কাজ করে তা দেখানোর জন্য আমি একটি প্লাগিন সংস্করণও যুক্ত করেছি
DUzun

8

কোড নয়:

var text  =  $('#listItem').clone().children().remove().end().text();

শুধু jQuery খাওয়ার জন্য jQuery হয়ে? যখন সাধারণ ক্রিয়াকলাপগুলিতে সেই শৃঙ্খলাবদ্ধ কমান্ডগুলি এবং এটির (অপ্রয়োজনীয়) প্রক্রিয়াকরণ জড়িত থাকে, সম্ভবত এটি jQuery এক্সটেনশন লেখার সময় হয়েছে:

(function ($) {
    function elementText(el, separator) {
        var textContents = [];
        for(var chld = el.firstChild; chld; chld = chld.nextSibling) {
            if (chld.nodeType == 3) { 
                textContents.push(chld.nodeValue);
            }
        }
        return textContents.join(separator);
    }
    $.fn.textNotChild = function(elementSeparator, nodeSeparator) {
    if (arguments.length<2){nodeSeparator="";}
    if (arguments.length<1){elementSeparator="";}
        return $.map(this, function(el){
            return elementText(el,nodeSeparator);
        }).join(elementSeparator);
    }
} (jQuery));

কল করতে:

var text = $('#listItem').textNotChild();

যুক্তিগুলি কোনও ভিন্ন দৃশ্যের মুখোমুখি হয়, যেমন

<li>some text<a>more text</a>again more</li>
<li>second text<a>more text</a>again more</li>

var text = $("li").textNotChild(".....","<break>");

পাঠ্যের মান থাকবে:

some text<break>again more.....second text<break>again more

1
খুশী হলাম। এটি jQuery এর পরবর্তী সংস্করণের জন্য একটি টান অনুরোধ তৈরি সম্পর্কে?
জ্যারেড টমাসজেউস্কি

8

এটা চেষ্টা কর:

$('#listItem').not($('#listItem').children()).text()

6

এটির প্রয়োজন অনুসারে এমন কিছু হওয়া দরকার যা আপনি যে কাঠামোর সাথে উপস্থাপন করেছেন তার উপর নির্ভরশীল। আপনি যে উদাহরণ সরবরাহ করেছেন তা উদাহরণস্বরূপ:

$(document).ready(function(){
     var $tmp = $('#listItem').children().remove();
     $('#listItem').text('').append($tmp);
});

ডেমো: http://jquery.nodnod.net/cases/2385/run

তবে এটি আপনি যে পোস্ট করেছেন তার সাথে একইভাবে মার্কআপের উপর নির্ভরশীল।


2
ভবিষ্যতের পাঠক সাবধান: এই উত্তরের কোডটি আসল উপাদানগুলিতে বাচ্চাদের মেরে ফেলে। cloneযদি এখানে উদ্দেশ্যটি কার্যকর না হয় তবে এখানে একটি পদ্ধতি ব্যবহার করা উচিত ।
মাহন 17

@ ডটনেটওয়ালার উত্তর নীচে, এবং এটির পরিবর্তে ব্যবহার করা উচিত। বা কমপক্ষে, এর .detach()পরিবর্তে পদ্ধতিটি ব্যবহার করুন .remove()
ডন ম্যাককুরডি


4
jQuery.fn.ownText = function () {
    return $(this).contents().filter(function () {
        return this.nodeType === Node.TEXT_NODE;
    }).text();
};

1
এই কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ, যা কিছু তাত্ক্ষণিক সহায়তা সরবরাহ করতে পারে। একটি সঠিক ব্যাখ্যা কেন এটি সমস্যার একটি ভাল সমাধান তা দেখিয়ে তার শিক্ষাগত মানকে ব্যাপকভাবে উন্নত করবে এবং ভবিষ্যতের পাঠকদের জন্য একই, তবে অভিন্ন নয়, এমন প্রশ্নের সাথে আরও দরকারী করে তুলবে। দয়া করে ব্যাখ্যা যুক্ত করতে আপনার উত্তর সম্পাদনা করুন, এবং কোন সীমাবদ্ধতা এবং অনুমানগুলি প্রযোজ্য তা একটি ইঙ্গিত দিন।
টবি স্পিড 10 ই

3

এটি একটি পুরানো প্রশ্ন তবে শীর্ষ উত্তরটি খুব অদক্ষ। এখানে একটি আরও ভাল সমাধান:

$.fn.myText = function() {
    var str = '';

    this.contents().each(function() {
        if (this.nodeType == 3) {
            str += this.textContent || this.innerText || '';
        }
    });

    return str;
};

এবং কেবল এটি করুন:

$("#foo").myText();

3

আমি ধারণা করি এটিও একটি সূক্ষ্ম সমাধান হবে - আপনি যদি সমস্ত পাঠ্য নোডের বিষয়বস্তু পেতে চান যা নির্বাচিত উপাদানগুলির প্রত্যক্ষ শিশু।

$(selector).contents().filter(function(){ return this.nodeType == 3; }).text();

দ্রষ্টব্য: jQuery ডকুমেন্টেশন বিষয়বস্তু ফাংশন ব্যাখ্যা করতে অনুরূপ কোড ব্যবহার করে: https://api.jquery.com/contents/

পিএস এটি করার জন্য কিছুটা কুরুচিপূর্ণ উপায় রয়েছে তবে জিনিসগুলি কীভাবে কাজ করে তা গভীরতার সাথে এটি আরও দেখায় এবং পাঠ্য নোডগুলির মধ্যে কাস্টম বিভাজকের জন্য অনুমতি দেয় (সম্ভবত আপনি সেখানে লাইন বিরতি চান)

$(selector).contents().filter(function(){ return this.nodeType == 3; }).map(function() { return this.nodeValue; }).toArray().join("");

1

আমি এইচটিএমএল উপাদানগুলির সাথে সংযুক্ত নয় এমন সমস্ত পাঠ্য উপাদানগুলি খুঁজে পেতে ক্রিয়েটরিওয়ালার ব্যবহার করার প্রস্তাব দিচ্ছি (এই ফাংশনটি jQuery প্রসারিত করতে ব্যবহার করা যেতে পারে):

function textNodesOnlyUnder(el) {
  var resultSet = [];
  var n = null;
  var treeWalker  = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, function (node) {
    if (node.parentNode.id == el.id && node.textContent.trim().length != 0) {
      return NodeFilter.FILTER_ACCEPT;
    }
    return NodeFilter.FILTER_SKIP;
  }, false);
  while (n = treeWalker.nextNode()) {
    resultSet.push(n);
  }
  return resultSet;
}



window.onload = function() {
  var ele = document.getElementById('listItem');
  var textNodesOnly = textNodesOnlyUnder(ele);
  var resultingText = textNodesOnly.map(function(val, index, arr) {
    return 'Text element N. ' + index + ' --> ' + val.textContent.trim();
  }).join('\n');
  document.getElementById('txtArea').value = resultingText;
}
<li id="listItem">
    This is some text
    <span id="firstSpan">First span text</span>
    <span id="secondSpan">Second span text</span>
</li>
<textarea id="txtArea" style="width: 400px;height: 200px;"></textarea>


1

যদি indexপাঠ্য নোডের অবস্থানটি তার ভাইবোনদের মধ্যে স্থির করা হয় তবে আপনি এটি ব্যবহার করতে পারেন

$('parentselector').contents().eq(index).text()

1

আপনার কীভাবে নমনীয় বা কয়টি ক্ষেত্রে এটি আবশ্যক তা নিশ্চিত নয়, তবে উদাহরণস্বরূপ, যদি টেক্সটটি সর্বদা প্রথম এইচটিএমএল ট্যাগগুলির আগে উপস্থিত হয় - তবে কেন কেবল প্রথম ট্যাগটিতে অভ্যন্তরীণ এইচটিএমএলকে বিভক্ত করে পূর্বেরটিকে নেওয়া হবে না:

$('#listItem').html().split('<span')[0]; 

এবং আপনার যদি এটির আরও প্রশস্ত প্রয়োজন তবে সম্ভবত just

$('#listItem').html().split('<')[0]; 

এবং যদি আপনার দুটি মার্কারের মধ্যে পাঠ্য প্রয়োজন যেমন একটি জিনিস পরে তবে অন্যটির আগে আপনি শুল্ক ছাড়াই ত্রুটিগুলি এড়িয়ে গিয়ে স্টেটমেন্ট বা শেষ মার্কার বা উভয়ই যথেষ্ট নমনীয় করতে বিবৃতি ব্যবহার করতে পারেন :

var startMarker = '';// put any starting marker here
var endMarker = '<';// put the end marker here
var myText = String( $('#listItem').html() );
// if the start marker is found, take the string after it
myText = myText.split(startMarker)[1];        
// if the end marker is found, take the string before it
myText = myText.split(endMarker)[0];
console.log(myText); // output text between the first occurrence of the markers, assuming both markers exist.  If they don't this will throw an error, so some if statements to check params is probably in order...

আমি সাধারণত এর মতো দরকারী জিনিসের জন্য ইউটিলিটি ফাংশনগুলি তৈরি করি, এগুলিকে ত্রুটিমুক্ত করে তোলে এবং তারপরে এই জাতীয় স্ট্রিং ম্যানিপুলেশন এবং নাল রেফারেন্সগুলি ঝুঁকিপূর্ণ করার পরিবর্তে ঘন ঘন ঘন ঘন ঘন ঘন ঘন একবার নির্ভর করি That এভাবে, আপনি ফাংশনটি আবার ব্যবহার করতে পারেন প্রচুর প্রকল্পে এবং কখনই আবার সময় নষ্ট করতে হবে না কেন একটি স্ট্রিং রেফারেন্সে একটি অপরিজ্ঞাত রেফারেন্স ত্রুটি রয়েছে। এখন পর্যন্ত সংক্ষিপ্ত 1 লাইন কোড নাও হতে পারে তবে আপনার ইউটিলিটি ফাংশনটি পরে, এটি তখন থেকে এক লাইন। নোট করুন বেশিরভাগ কোডটি কেবল প্যারামিটারগুলি হ্যান্ডলিং করছে সেখানে ত্রুটিগুলি এড়ানোর জন্য নয় :)

উদাহরণ স্বরূপ:

/**
* Get the text between two string markers.
**/
function textBetween(__string,__startMark,__endMark){
    var hasText = typeof __string !== 'undefined' && __string.length > 0;
    if(!hasText) return __string;
    var myText = String( __string );
    var hasStartMarker = typeof __startMark !== 'undefined' && __startMark.length > 0 && __string.indexOf(__startMark)>=0;
    var hasEndMarker =  typeof __endMark !== 'undefined' && __endMark.length > 0 && __string.indexOf(__endMark) > 0;
    if( hasStartMarker )  myText = myText.split(__startMark)[1];
    if( hasEndMarker )    myText = myText.split(__endMark)[0];
    return myText;
}

// now with 1 line from now on, and no jquery needed really, but to use your example:
var textWithNoHTML = textBetween( $('#listItem').html(), '', '<'); // should return text before first child HTML tag if the text is on page (use document ready etc)

আপনার যদি পাঠ্যটি প্রতিস্থাপন করতে হয় তবে কেবল ব্যবহার করুন $('#listItem').html( newHTML ); যেখানে নিউএইচটিএমএল একটি পরিবর্তনশীল যা ইতিমধ্যে স্ট্রিপ ডাউন পাঠ্য রয়েছে।
ওজি শান


0

আমি একটি নির্দিষ্ট সমাধান নিয়ে এসেছি যা ক্লোনটির ক্লোনিং এবং পরিবর্তনের চেয়ে অনেক বেশি দক্ষ হওয়া উচিত। এই সমাধানটি কেবলমাত্র নিম্নলিখিত দুটি রিজার্ভেশন নিয়ে কাজ করে, তবে বর্তমানে গৃহীত সমাধানের চেয়ে আরও দক্ষ হওয়া উচিত:

  1. আপনি কেবল পাঠ্য পেয়ে যাচ্ছেন
  2. আপনি যে পাঠ্যটি বের করতে চান তা শিশু উপাদানগুলির আগে

যা বলেছিল, এখানে কোডটি রয়েছে:

// 'element' is a jQuery element
function getText(element) {
  var text = element.text();
  var childLength = element.children().text().length;
  return text.slice(0, text.length - childLength);
}

0

শুধু প্রশ্ন মতো আমি কিছু টেক্সট Regex প্রতিকল্পন কাজ করার জন্য নির্যাস টেক্সট করার চেষ্টা ছিল কিন্তু সমস্যার পেয়ে ছিল যেখানে আমার ভেতরের উপাদান (যেমন: <i>, <div>,<span> , ইত্যাদি) সরানো পেয়ে হয়েছে।

নিম্নলিখিত কোডটি ভালভাবে কাজ করছে এবং আমার সমস্ত সমস্যা সমাধান করেছে বলে মনে হচ্ছে।

এটি এখানে প্রদত্ত কয়েকটি উত্তর ব্যবহার করে তবে বিশেষত, যখন উপাদানটি থাকে তখন কেবলমাত্র টেক্সটটি প্রতিস্থাপন করবে nodeType === 3

$(el).contents().each(function() { 
  console.log(" > Content: %s [%s]", this, (this.nodeType === 3));

  if (this.nodeType === 3) {
    var text = this.textContent;
    console.log(" > Old   : '%s'", text);

    regex = new RegExp("\\[\\[" + rule + "\\.val\\]\\]", "g");
    text = text.replace(regex, value);

    regex = new RegExp("\\[\\[" + rule + "\\.act\\]\\]", "g");
    text = text.replace(regex, actual);

    console.log(" > New   : '%s'", text);
    this.textContent = text;
  }
});

উপরেরটি যা দেয় তা হ'ল প্রদত্ত সমস্ত উপাদানগুলির মধ্য দিয়ে লুপ হয় el(যা কেবলমাত্র দিয়ে নেওয়া হয়েছিল $("div.my-class[name='some-name']");each প্রতিটি অভ্যন্তরের উপাদানগুলির জন্য এটি মূলত এগুলি উপেক্ষা করে। পাঠ্যের প্রতিটি অংশের জন্য (নির্ধারিত হিসাবেif (this.nodeType === 3) ) এটি কেবলমাত্র সেই উপাদানগুলিতেই রেজেক্স বিকল্পটি প্রয়োগ করবে ।

this.textContent = textঅংশ কেবল প্রতিস্থাপিত টেক্সট, যা আমার ক্ষেত্রে, আমি টোকেন খুঁজছেন ছিল প্রতিস্থাপন [[min.val]], [[max.val]]ইত্যাদি

এই সংক্ষিপ্ত কোড অংশটি যে কেউ প্রশ্ন জিজ্ঞাসা করছে যা করতে চেষ্টা করছে ... এবং আরও কিছুটা সাহায্য করবে।


-1

শুধু একটি এটা করা <p>বা <font>যে দখল $ ( '# listItem ফন্ট')। টেক্সট ()

মাথায় আসে প্রথম জিনিস

<li id="listItem">
    <font>This is some text</font>
    <span id="firstSpan">First span text</span>
    <span id="secondSpan">Second span text</span>
</li>

6
ফ্রি পাঠ্য ট্যাগে রাখার নিয়ন্ত্রণ আমার নেই, কারণ আমি যে কোডটি দিয়ে কাজ করছি তা আমার দ্বারা তৈরি হয়নি। আমি যদি কেবল এই পাঠ্যটি ধরতে পারি তবে আমি এটিকে সরিয়ে ফেলতে এবং তার চারপাশের ট্যাগগুলির সাথে এটি প্রতিস্থাপন করতে বা আমার ইচ্ছামতো কিছু করতে পারি। তবে আবার, এইচটিএমএল ইতিমধ্যে প্রাক-লিখিত আছে।
মেগা ম্যাট

আহ, ঠিক আছে. তারপরে আমি মনে করি আপনাকে ফলাফলগুলি ফিল্টার করতে হবে: দুঃখিত।
ডোরজান

-1

আপনি এটি চেষ্টা করতে পারেন

alert(document.getElementById('listItem').firstChild.data)

-2

ইনারএইচটিএমএল এবং ইনটারনেক্সট একই কিনা তা পরীক্ষা করতে অতিরিক্ত শর্ত ব্যবহার করুন। কেবলমাত্র সেই ক্ষেত্রে, পাঠ্যটি প্রতিস্থাপন করুন।

$(function() {
$('body *').each(function () {
    console.log($(this).html());
    console.log($(this).text());
    if($(this).text() === "Search" && $(this).html()===$(this).text())  {
        $(this).html("Find");
    }
})
})

http://jsfiddle.net/7RSGh/


-2

ফলাফলটি ট্রিম করতে সক্ষম হতে ডটনেটওয়ালার মতো ব্যবহার করুন:

$("#foo")
    .clone()    //clone the element
    .children() //select all the children
    .remove()   //remove all the children
    .end()  //again go back to selected element
    .text()
    .trim();

আমি জানতে পেরেছি যে সংক্ষিপ্ত সংস্করণটি ব্যবহার document.getElementById("listItem").childNodes[0]করা jQuery এর ট্রিম () এর সাথে কাজ করবে না।


3
এটি কারণ document.getElementById("listItem").childNodes[0]সরল জাভাস্ক্রিপ্ট, আপনাকে এটি jQuery ফাংশনে আবদ্ধ করতে হবে$(document.getElementById("listItem").childNodes[0]).trim()
রেড তাজ

ঠিক আছে যে বোধগম্য। হা হা। ধন্যবাদ!
মেরিওন

1
এটি ডটনেটওয়ালার উত্তরের প্রায় অনুরূপ । আপনি যা করেছেন তা .trim()শেষ পর্যন্ত যুক্ত হয়েছিল । এই উত্তর কি প্রয়োজনীয়?
সমস্ত কর্মীরা

-3

আমি কোনও জেকুরি বিশেষজ্ঞ নই, তবে কীভাবে,

$('#listItem').children().first().text()

1
আপনি যদি কোনও জিকিউরি বিশেষজ্ঞ নোট করেন, তবে অন্য উত্তরগুলি পড়ে প্রথমে বিশেষজ্ঞের হয়ে ওঠেন না কেন? ... তাদের মধ্যে একটি হ'ল আপনি যা লিখেছিলেন তার মতোই হ'ল, নীচের মন্তব্যে ব্যাখ্যা করেছেন যে এটি কেন নয় একটি ভাল ধারনা.
ওসকার হলমক্র্যাটজ

-4

এটি অনির্ধারিত, তবে আমি মনে করি আপনি এই জাতীয় কিছু চেষ্টা করতে সক্ষম হতে পারেন:

 $('#listItem').not('span').text();

http://api.jquery.com/not/


3
কারণ এটি হিসাবে একই $('#listItem').text()। কিছু যোগ #listItemনা <span>তাই যোগ not('span')হয় না।
থমাস হিগিনবোথাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.